Repository: sourcefabric/Newscoop Branch: v4.4 Commit: 3df835637609 Files: 5358 Total size: 36.0 MB Directory structure: gitextract_fnmcfrm8/ ├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── README.md ├── behat.yml ├── docker/ │ ├── docker-entrypoint.sh │ ├── docker-newscoop.yml │ ├── import-newscoop.sh │ ├── newscoop-dev.conf │ └── newscoop.conf ├── docker-compose-dev.yml ├── docker-compose.yml ├── features/ │ ├── 0_api_articles.feature │ ├── 1_api_images.feature │ ├── 2_api_linkImage_to_article.feature │ ├── 3_api_articles_search.feature │ ├── 3_api_topics.feature │ ├── 4_api_link_unlink_topic_to_from_article.feature │ ├── 5_api_related_articles.feature │ ├── 6_api_link_unlink_topic.feature │ ├── bootstrap/ │ │ ├── FeatureContext.php │ │ └── RestContext.php │ ├── steps/ │ │ └── .gitignore │ └── support/ │ └── .gitignore ├── newscoop/ │ ├── .gitignore │ ├── .rmt.yml │ ├── DETAILED-CHANGELOG.txt │ ├── LICENSE_3RD_PARTY.txt │ ├── RMT │ ├── admin-files/ │ │ ├── ad.php │ │ ├── ad_popup.php │ │ ├── article_import/ │ │ │ ├── CampsiteArticleTemplate.stw │ │ │ ├── CommandProcessor.php │ │ │ ├── DocBookParser.php │ │ │ ├── DocbookFinalForm.xml │ │ │ ├── Installation.txt │ │ │ ├── index.php │ │ │ ├── stylesheet.css │ │ │ └── sxwToDocbook.xsl │ │ ├── article_types/ │ │ │ ├── add.php │ │ │ ├── do_add.php │ │ │ ├── do_comment_activation.php │ │ │ ├── do_del.php │ │ │ ├── do_filter.php │ │ │ ├── do_hide.php │ │ │ ├── do_rename.php │ │ │ ├── do_translate.php │ │ │ ├── fields/ │ │ │ │ ├── add.php │ │ │ │ ├── do_add.php │ │ │ │ ├── do_del.php │ │ │ │ ├── do_hide.php │ │ │ │ ├── do_rename.php │ │ │ │ ├── do_reorder.php │ │ │ │ ├── do_retype.php │ │ │ │ ├── do_translate.php │ │ │ │ ├── index.php │ │ │ │ ├── rename.php │ │ │ │ ├── retype.php │ │ │ │ ├── set_is_content.php │ │ │ │ └── set_show_in_editor.php │ │ │ ├── index.php │ │ │ ├── merge.php │ │ │ ├── merge2.php │ │ │ ├── merge3.php │ │ │ └── rename.php │ │ ├── articles/ │ │ │ ├── JSON.php │ │ │ ├── add.php │ │ │ ├── add_move.php │ │ │ ├── article_common.php │ │ │ ├── article_stylesheet.css │ │ │ ├── autopublish.php │ │ │ ├── autopublish_del.php │ │ │ ├── autopublish_do_add.php │ │ │ ├── comments/ │ │ │ │ ├── add_comment_form.php │ │ │ │ ├── reply.php │ │ │ │ └── show_comments.php │ │ │ ├── context_box/ │ │ │ │ └── popup.php │ │ │ ├── do_add.php │ │ │ ├── do_article_action.php │ │ │ ├── do_article_list_action.php │ │ │ ├── do_edit.php │ │ │ ├── do_position.php │ │ │ ├── do_translate.php │ │ │ ├── do_unlock.php │ │ │ ├── duplicate.php │ │ │ ├── edit.php │ │ │ ├── edit_comments_box.php │ │ │ ├── edit_context_box.php │ │ │ ├── edit_html.php │ │ │ ├── edit_html_authors.php │ │ │ ├── edit_info_box.php │ │ │ ├── edit_javascript.php │ │ │ ├── edit_locations_box.php │ │ │ ├── edit_main_box.php │ │ │ ├── edit_media_box.php │ │ │ ├── edit_multidate_box.php │ │ │ ├── edit_playlist.php │ │ │ ├── edit_schedule_box.php │ │ │ ├── edit_switches_box.php │ │ │ ├── edit_topics_box.php │ │ │ ├── editor_load_countable.php │ │ │ ├── editor_load_tinymce.php │ │ │ ├── empty.php │ │ │ ├── files/ │ │ │ │ ├── do_add.php │ │ │ │ ├── do_add_existing.php │ │ │ │ ├── do_del.php │ │ │ │ ├── do_edit.php │ │ │ │ ├── edit.php │ │ │ │ └── popup.php │ │ │ ├── get.php │ │ │ ├── images/ │ │ │ │ ├── add.php │ │ │ │ ├── do_link.php │ │ │ │ ├── do_unlink.php │ │ │ │ ├── popup.php │ │ │ │ ├── search.php │ │ │ │ └── view.php │ │ │ ├── index.php │ │ │ ├── la_import.php │ │ │ ├── locations/ │ │ │ │ ├── country_codes.php │ │ │ │ ├── do_unlink.php │ │ │ │ ├── filter.php │ │ │ │ ├── popup.php │ │ │ │ ├── preview.php │ │ │ │ └── search.php │ │ │ ├── multi_autopublish.php │ │ │ ├── multidate/ │ │ │ │ └── popup.php │ │ │ ├── playlist/ │ │ │ │ └── popup.php │ │ │ ├── post.php │ │ │ ├── preview.php │ │ │ └── translate.php │ │ ├── backup.php │ │ ├── bugreporter/ │ │ │ ├── bug_handler_main.php │ │ │ ├── emailus.php │ │ │ └── errormessage.php │ │ ├── camp_html.php │ │ ├── country/ │ │ │ ├── add.php │ │ │ ├── country_common.php │ │ │ ├── do_add.php │ │ │ ├── do_del.php │ │ │ ├── do_edit.php │ │ │ ├── do_translate.php │ │ │ ├── edit.php │ │ │ ├── index.php │ │ │ └── translate.php │ │ ├── home.php │ │ ├── html_head.php │ │ ├── index.php │ │ ├── issues/ │ │ │ ├── add_new.php │ │ │ ├── add_prev.php │ │ │ ├── autopublish.php │ │ │ ├── autopublish_del.php │ │ │ ├── autopublish_do_add.php │ │ │ ├── delete.php │ │ │ ├── do_add_new.php │ │ │ ├── do_add_prev.php │ │ │ ├── do_del.php │ │ │ ├── do_edit.php │ │ │ ├── do_status.php │ │ │ ├── do_translate.php │ │ │ ├── edit.php │ │ │ ├── empty.php │ │ │ ├── get_templates.php │ │ │ ├── index.php │ │ │ ├── issue_common.php │ │ │ ├── preview.php │ │ │ ├── qadd.php │ │ │ └── translate.php │ │ ├── javascript_common.php │ │ ├── json.php │ │ ├── languages/ │ │ │ ├── add_modify.php │ │ │ ├── do_add_modify.php │ │ │ ├── do_del.php │ │ │ └── index.php │ │ ├── languages.php │ │ ├── lib_campsite.php │ │ ├── libs/ │ │ │ ├── ArticleList/ │ │ │ │ ├── ArticleList.php │ │ │ │ ├── actions.php │ │ │ │ ├── do_action.php │ │ │ │ ├── do_data.php │ │ │ │ ├── do_order.php │ │ │ │ ├── filters.php │ │ │ │ └── table.php │ │ │ ├── BaseList/ │ │ │ │ ├── BaseList.php │ │ │ │ └── table.php │ │ │ ├── ContextList/ │ │ │ │ ├── ContextList.php │ │ │ │ ├── actions.php │ │ │ │ ├── do_action.php │ │ │ │ ├── do_data.php │ │ │ │ ├── do_order.php │ │ │ │ ├── filters.php │ │ │ │ └── table.php │ │ │ ├── ImageList/ │ │ │ │ └── ImageList.php │ │ │ ├── MediaList/ │ │ │ │ └── MediaList.php │ │ │ └── MediaPlayer/ │ │ │ ├── MediaPlayer.php │ │ │ ├── flash.phtml │ │ │ ├── player.phtml │ │ │ └── video.phtml │ │ ├── media-archive/ │ │ │ ├── add.php │ │ │ ├── add_file.php │ │ │ ├── ajax_save.php │ │ │ ├── do_del.php │ │ │ ├── do_edit-attachment.php │ │ │ ├── do_edit.php │ │ │ ├── do_multiedit.php │ │ │ ├── do_multiedit_file.php │ │ │ ├── do_upload.php │ │ │ ├── do_upload_file.php │ │ │ ├── edit-attachment.php │ │ │ ├── edit.php │ │ │ ├── editor_load_tinymce.php │ │ │ ├── index.php │ │ │ ├── multiedit.php │ │ │ ├── multiedit_file.php │ │ │ ├── uploader.php │ │ │ └── uploader_file.php │ │ ├── menu.php │ │ ├── pending_articles/ │ │ │ └── index.php │ │ ├── plugins/ │ │ │ └── manage.php │ │ ├── pub/ │ │ │ ├── add_alias.php │ │ │ ├── aliases.php │ │ │ ├── do_add_alias.php │ │ │ ├── do_del_alias.php │ │ │ ├── do_edit_alias.php │ │ │ ├── edit_alias.php │ │ │ └── pub_common.php │ │ ├── sections/ │ │ │ ├── add.php │ │ │ ├── del.php │ │ │ ├── do_add.php │ │ │ ├── do_del.php │ │ │ ├── do_duplicate.php │ │ │ ├── do_edit.php │ │ │ ├── duplicate.php │ │ │ ├── duplicate_complete.php │ │ │ ├── edit.php │ │ │ ├── index.php │ │ │ └── section_common.php │ │ ├── set-author.php │ │ ├── universal-list/ │ │ │ └── index.php │ │ ├── users/ │ │ │ ├── access_form.php │ │ │ ├── authors.php │ │ │ ├── authors_ajax/ │ │ │ │ ├── detail.php │ │ │ │ └── grid.php │ │ │ ├── do_add.php │ │ │ ├── do_del.php │ │ │ ├── do_edit.php │ │ │ ├── do_ipadd.php │ │ │ ├── do_ipdel.php │ │ │ ├── load_tinymce.php │ │ │ ├── permission_list.php │ │ │ └── users_common.php │ │ └── widgets.php │ ├── admin-style/ │ │ ├── ColVis.css │ │ ├── action_buttons.css │ │ ├── admin_stylesheet.css │ │ ├── admin_stylesheet_context.css │ │ ├── admin_stylesheet_new.css │ │ ├── app.css │ │ ├── buttons.css │ │ ├── calendar/ │ │ │ ├── fullcalendar.css │ │ │ └── timepicker.css │ │ ├── comments.css │ │ ├── common.css │ │ ├── content.css │ │ ├── fg-menu/ │ │ │ ├── fg.menu.css │ │ │ ├── fg.menu.js │ │ │ ├── menuContent.html │ │ │ └── theme/ │ │ │ ├── ui.accordion.css │ │ │ ├── ui.all.css │ │ │ ├── ui.base.css │ │ │ ├── ui.core.css │ │ │ ├── ui.datepicker.css │ │ │ ├── ui.dialog.css │ │ │ ├── ui.progressbar.css │ │ │ ├── ui.resizable.css │ │ │ ├── ui.slider.css │ │ │ ├── ui.tabs.css │ │ │ └── ui.theme.css │ │ ├── fg.menu.css │ │ ├── form.css │ │ ├── image_management.css │ │ ├── jScrollPane.css │ │ ├── jquery-ui-1.8.6.custom.css │ │ ├── jquery-ui-1.8.6.datepicker.css │ │ ├── layout.css │ │ ├── lists.css │ │ ├── map-filter.css │ │ ├── map-picking.css │ │ ├── map-preview.css │ │ ├── misc-pages.css │ │ ├── modal-custom.css │ │ ├── modal-window.css │ │ ├── multidate.css │ │ ├── pagination.css │ │ ├── renditions.css │ │ ├── sidebar.css │ │ ├── slideshow-list.css │ │ ├── slideshow.css │ │ ├── table.css │ │ ├── themes_list.css │ │ ├── widgets.css │ │ └── zend_admin_stylesheet.css │ ├── admin.php │ ├── application/ │ │ ├── AppKernel.php │ │ ├── Bootstrap.php │ │ ├── SymfonyRequirements.php │ │ ├── autoload.php │ │ ├── check.php │ │ ├── configs/ │ │ │ ├── parameters/ │ │ │ │ ├── parameters.yml │ │ │ │ ├── parameters_cli.yml │ │ │ │ ├── parameters_development.yml │ │ │ │ └── parameters_testing.yml │ │ │ ├── security/ │ │ │ │ └── .gitkeep │ │ │ ├── services/ │ │ │ │ ├── audit.yml │ │ │ │ ├── comment.yml │ │ │ │ ├── comment_notification.yml │ │ │ │ ├── services.yml │ │ │ │ ├── template_lists.yml │ │ │ │ ├── user_attributes.yml │ │ │ │ └── user_points.yml │ │ │ ├── subscriptions/ │ │ │ │ └── .gitignore │ │ │ └── symfony/ │ │ │ ├── config.yml │ │ │ ├── config_dev.yml │ │ │ ├── config_prod.yml │ │ │ ├── config_testing.yml │ │ │ ├── routing.yml │ │ │ ├── routing_dev.yml │ │ │ └── security.yml │ │ ├── console │ │ ├── controllers/ │ │ │ ├── AuthController.php │ │ │ ├── AuthorController.php │ │ │ ├── DashboardController.php │ │ │ ├── EmailController.php │ │ │ ├── ErrorController.php │ │ │ ├── FeedbackController.php │ │ │ ├── ImageController.php │ │ │ ├── LegacyController.php │ │ │ ├── MyTopicsController.php │ │ │ ├── OmniboxController.php │ │ │ ├── RatingController.php │ │ │ ├── RegisterController.php │ │ │ ├── SearchController.php │ │ │ ├── TopicController.php │ │ │ ├── UserController.php │ │ │ └── helpers/ │ │ │ ├── Acl.php │ │ │ ├── Article.php │ │ │ ├── Datatable.php │ │ │ ├── Em.php │ │ │ ├── Entity.php │ │ │ ├── Form.php │ │ │ ├── GenericDatatable.php │ │ │ ├── Log.php │ │ │ ├── Newsletter.php │ │ │ ├── Plupload.php │ │ │ ├── Service.php │ │ │ ├── Sidebar.php │ │ │ └── Smarty.php │ │ ├── forms/ │ │ │ ├── Confirm.php │ │ │ ├── Contact.php │ │ │ ├── Login.php │ │ │ ├── PasswordRestore.php │ │ │ ├── PasswordRestorePassword.php │ │ │ ├── Profile.php │ │ │ ├── Register.php │ │ │ ├── SendEmail.php │ │ │ ├── Social.php │ │ │ └── Topics.php │ │ ├── layouts/ │ │ │ └── scripts/ │ │ │ ├── admin.phtml │ │ │ ├── admin_menu.phtml │ │ │ ├── iframe.phtml │ │ │ └── modal.phtml │ │ ├── modules/ │ │ │ └── admin/ │ │ │ ├── Bootstrap.php │ │ │ ├── controllers/ │ │ │ │ ├── AclController.php │ │ │ │ ├── ApplicationController.php │ │ │ │ ├── AuthController.php │ │ │ │ ├── BlogController.php │ │ │ │ ├── CommentAcceptanceController.php │ │ │ │ ├── CommentCommenterController.php │ │ │ │ ├── CommentController.php │ │ │ │ ├── ErrorController.php │ │ │ │ ├── FeedbackController.php │ │ │ │ ├── ImageController.php │ │ │ │ ├── LanguagesController.php │ │ │ │ ├── LegacyController.php │ │ │ │ ├── LogController.php │ │ │ │ ├── MediaController.php │ │ │ │ ├── MultidateController.php │ │ │ │ ├── RenditionController.php │ │ │ │ ├── SlideshowController.php │ │ │ │ ├── SlideshowRestController.php │ │ │ │ ├── StaffController.php │ │ │ │ ├── SupportController.php │ │ │ │ ├── TemplateController.php │ │ │ │ ├── ThemesController.php │ │ │ │ ├── UserController.php │ │ │ │ ├── UserGroupController.php │ │ │ │ └── UserPointsController.php │ │ │ ├── forms/ │ │ │ │ ├── Ban.php │ │ │ │ ├── BanUser.php │ │ │ │ ├── Blog.php │ │ │ │ ├── Comment/ │ │ │ │ │ ├── EditForm.php │ │ │ │ │ └── ReplyForm.php │ │ │ │ ├── Comment.php │ │ │ │ ├── CommentAcceptance.php │ │ │ │ ├── Commenter.php │ │ │ │ ├── EditPassword.php │ │ │ │ ├── Geolocation.php │ │ │ │ ├── Language.php │ │ │ │ ├── Profile.php │ │ │ │ ├── RenameUser.php │ │ │ │ ├── ReplaceTemplate.php │ │ │ │ ├── Slideshow.php │ │ │ │ ├── SlideshowCreate.php │ │ │ │ ├── SlideshowItem.php │ │ │ │ ├── SlideshowVideoItem.php │ │ │ │ ├── Staff.php │ │ │ │ ├── Support.php │ │ │ │ ├── Template.php │ │ │ │ ├── Theme/ │ │ │ │ │ ├── OutputSettings.php │ │ │ │ │ └── Upload.php │ │ │ │ ├── Theme.php │ │ │ │ ├── Upload.php │ │ │ │ ├── User.php │ │ │ │ ├── UserCriteria.php │ │ │ │ └── UserPoints.php │ │ │ └── views/ │ │ │ ├── helpers/ │ │ │ │ ├── Camelize.php │ │ │ │ ├── CommentAction.php │ │ │ │ ├── CommentArticle.php │ │ │ │ ├── CommentCommenter.php │ │ │ │ ├── CommentIndex.php │ │ │ │ ├── CommentMessage.php │ │ │ │ ├── FlashMsg.php │ │ │ │ ├── FormatBytes.php │ │ │ │ ├── GetAvatar.php │ │ │ │ ├── ImageArchive.php │ │ │ │ ├── ImageEditor.php │ │ │ │ ├── JQueryReady.php │ │ │ │ ├── JQueryUtils.php │ │ │ │ ├── Jsonified.php │ │ │ │ ├── LinkArticle.php │ │ │ │ ├── LinkArticleObj.php │ │ │ │ ├── LinkBan.php │ │ │ │ ├── LinkDelete.php │ │ │ │ ├── LinkEdit.php │ │ │ │ ├── MaxFileSize.php │ │ │ │ ├── ModerateBodyComment.php │ │ │ │ ├── ModerateSubjectComment.php │ │ │ │ ├── Plupload.php │ │ │ │ ├── RenderActions.php │ │ │ │ ├── RenderDatatable.php │ │ │ │ ├── RenderDate.php │ │ │ │ ├── RenderError.php │ │ │ │ ├── RenderFilter.php │ │ │ │ ├── RenderMessage.php │ │ │ │ ├── RenderNewsItem.php │ │ │ │ ├── RenderPackageItem.php │ │ │ │ ├── RenderPackageItemGroup.php │ │ │ │ ├── RenderPager.php │ │ │ │ ├── RenditionPreview.php │ │ │ │ ├── Slideshow.php │ │ │ │ ├── SlideshowItem.php │ │ │ │ ├── SlideshowItemPreview.php │ │ │ │ ├── SlideshowsJson.php │ │ │ │ ├── StringLimit.php │ │ │ │ ├── ToggleCheckbox.php │ │ │ │ └── VideoPreview.php │ │ │ └── scripts/ │ │ │ ├── _p/ │ │ │ │ └── generic-datatable.phtml │ │ │ ├── acl/ │ │ │ │ ├── edit.phtml │ │ │ │ └── form.phtml │ │ │ ├── actions.phtml │ │ │ ├── application/ │ │ │ │ └── help.phtml │ │ │ ├── auth/ │ │ │ │ └── login.phtml │ │ │ ├── blog/ │ │ │ │ ├── index.phtml │ │ │ │ └── nosection.phtml │ │ │ ├── comment/ │ │ │ │ ├── add.phtml │ │ │ │ ├── edit.phtml │ │ │ │ ├── list.phtml │ │ │ │ └── set-status.phtml │ │ │ ├── comment-acceptance/ │ │ │ │ ├── add.phtml │ │ │ │ ├── edit.phtml │ │ │ │ └── table.phtml │ │ │ ├── comment-commenter/ │ │ │ │ ├── add.phtml │ │ │ │ ├── edit.phtml │ │ │ │ ├── index.phtml │ │ │ │ └── toggle-ban.phtml │ │ │ ├── datatable.phtml │ │ │ ├── error/ │ │ │ │ ├── deny.phtml │ │ │ │ └── index.phtml │ │ │ ├── error.phtml │ │ │ ├── feedback/ │ │ │ │ ├── set-status.phtml │ │ │ │ └── table.phtml │ │ │ ├── filter.phtml │ │ │ ├── image/ │ │ │ │ ├── archive.phtml │ │ │ │ ├── article-attach.phtml │ │ │ │ ├── article.phtml │ │ │ │ ├── edit-image-data.phtml │ │ │ │ ├── edit.phtml │ │ │ │ ├── editor.phtml │ │ │ │ └── rendition.phtml │ │ │ ├── languages/ │ │ │ │ ├── add.phtml │ │ │ │ ├── edit.phtml │ │ │ │ └── index.phtml │ │ │ ├── legacy/ │ │ │ │ └── index.phtml │ │ │ ├── link-ban.phtml │ │ │ ├── link-delete.phtml │ │ │ ├── link-edit.phtml │ │ │ ├── log/ │ │ │ │ └── index.phtml │ │ │ ├── media/ │ │ │ │ ├── list-images.phtml │ │ │ │ └── list-slideshows.phtml │ │ │ ├── message.phtml │ │ │ ├── news-item.phtml │ │ │ ├── package/ │ │ │ │ └── item.phtml │ │ │ ├── package-item-group.phtml │ │ │ ├── package-item.phtml │ │ │ ├── pager.phtml │ │ │ ├── paginator-hash.phtml │ │ │ ├── paginator-template.phtml │ │ │ ├── paginator.phtml │ │ │ ├── plupload.phtml │ │ │ ├── rendition/ │ │ │ │ ├── index.phtml │ │ │ │ └── preview.phtml │ │ │ ├── slideshow/ │ │ │ │ ├── add-video-item.phtml │ │ │ │ ├── attach.phtml │ │ │ │ ├── create.phtml │ │ │ │ ├── edit-item.phtml │ │ │ │ ├── edit.phtml │ │ │ │ ├── item-preview.phtml │ │ │ │ ├── item.phtml │ │ │ │ ├── slideshow.phtml │ │ │ │ ├── vimeo-preview.phtml │ │ │ │ └── youtube-preview.phtml │ │ │ ├── slideshow-attach-template.phtml │ │ │ ├── slideshow-box.phtml │ │ │ ├── slideshow-list.phtml │ │ │ ├── slideshow-template.phtml │ │ │ ├── staff/ │ │ │ │ ├── add.phtml │ │ │ │ ├── edit-access.phtml │ │ │ │ ├── edit.phtml │ │ │ │ └── table.phtml │ │ │ ├── support/ │ │ │ │ ├── close.phtml │ │ │ │ └── index.phtml │ │ │ ├── template/ │ │ │ │ ├── edit-image.phtml │ │ │ │ ├── edit-other.phtml │ │ │ │ ├── edit-template.phtml │ │ │ │ ├── index.phtml │ │ │ │ └── upload.phtml │ │ │ ├── test/ │ │ │ │ ├── index.phtml │ │ │ │ ├── test-api-follow.phtml │ │ │ │ └── test-api.phtml │ │ │ ├── themes/ │ │ │ │ ├── advanced-theme-settings.phtml │ │ │ │ ├── index.phtml │ │ │ │ ├── output-edit.phtml │ │ │ │ ├── wizard-theme-article-types.adv.phtml │ │ │ │ ├── wizard-theme-article-types.phtml │ │ │ │ ├── wizard-theme-files.adv.phtml │ │ │ │ ├── wizard-theme-playlists.phtml │ │ │ │ ├── wizard-theme-settings.adv.phtml │ │ │ │ ├── wizard-theme-settings.phtml │ │ │ │ ├── wizard-theme-template-settings.adv.phtml │ │ │ │ └── wizard-theme-template-settings.phtml │ │ │ ├── toggle-checkbox.phtml │ │ │ ├── user/ │ │ │ │ ├── create.phtml │ │ │ │ ├── edit-password.phtml │ │ │ │ ├── edit.phtml │ │ │ │ ├── geolocation.phtml │ │ │ │ ├── index.phtml │ │ │ │ ├── list-inactive.phtml │ │ │ │ ├── profile.phtml │ │ │ │ ├── rename.phtml │ │ │ │ └── toggle-ban.phtml │ │ │ ├── user-group/ │ │ │ │ ├── add.phtml │ │ │ │ ├── edit-access.phtml │ │ │ │ └── index.phtml │ │ │ └── user-points/ │ │ │ └── index.phtml │ │ ├── phpunit.bootstrap.php │ │ ├── phpunit.xml.dist │ │ ├── plugins/ │ │ │ ├── Acl.php │ │ │ ├── Auth.php │ │ │ ├── Bootstrap.php │ │ │ ├── CampPluginAutoload.php │ │ │ ├── ContentType.php │ │ │ └── Upgrade.php │ │ └── views/ │ │ └── scripts/ │ │ ├── auth_index.tpl │ │ ├── auth_password-restore-after.tpl │ │ ├── auth_password-restore-finish.tpl │ │ ├── auth_password-restore.tpl │ │ ├── author_profile.tpl │ │ ├── comments/ │ │ │ └── index.phtml │ │ ├── dashboard_index.tpl │ │ ├── email_comment-notify.tpl │ │ ├── email_confirm.tpl │ │ ├── email_password-restore.tpl │ │ ├── error/ │ │ │ └── error.phtml │ │ ├── error_error.tpl │ │ ├── layout.tpl │ │ ├── legacy/ │ │ │ └── index.phtml │ │ ├── legacy_index.tpl │ │ ├── omnibox_index.tpl │ │ ├── paginator_control.tpl │ │ ├── register_after.tpl │ │ ├── register_confirm.tpl │ │ ├── register_index.tpl │ │ ├── register_pending.tpl │ │ ├── register_social.tpl │ │ ├── search_index.tpl │ │ ├── topic_articles.tpl │ │ ├── user_index.tpl │ │ └── user_profile.tpl │ ├── application.php │ ├── bin/ │ │ ├── .htaccess │ │ ├── UpdateApplicationVersionCurrentVersion.php │ │ ├── cli_script_lib.php │ │ ├── events-notifier │ │ ├── newscoop-autopublish │ │ ├── newscoop-backup │ │ ├── newscoop-indexer │ │ ├── newscoop-restore │ │ ├── newscoop-statistics │ │ ├── newscoop-stats │ │ ├── newscoop-utf8-converter │ │ ├── newscoop_bootstrap.php │ │ ├── post-install.sh │ │ ├── subscription-notifier │ │ └── webcode_generate_all.sh │ ├── cache/ │ │ ├── .gitignore │ │ └── .htaccess │ ├── classes/ │ │ ├── Alias.php │ │ ├── Article.php │ │ ├── ArticleAttachment.php │ │ ├── ArticleAuthor.php │ │ ├── ArticleData.php │ │ ├── ArticleImage.php │ │ ├── ArticleIndex.php │ │ ├── ArticlePublish.php │ │ ├── ArticleTopic.php │ │ ├── ArticleType.php │ │ ├── ArticleTypeField.php │ │ ├── Attachment.php │ │ ├── Author.php │ │ ├── AuthorAlias.php │ │ ├── AuthorAssignedType.php │ │ ├── AuthorBiography.php │ │ ├── AuthorType.php │ │ ├── Browser.php │ │ ├── BugReporter.php │ │ ├── CampCache.php │ │ ├── CampCacheList.php │ │ ├── CampMail.php │ │ ├── CampPlugin.php │ │ ├── CampTemplateCache.php │ │ ├── ContextBox.php │ │ ├── ContextBoxArticle.php │ │ ├── Country.php │ │ ├── DatabaseObject.php │ │ ├── DbObjectArray.php │ │ ├── DbReplication.php │ │ ├── Event.php │ │ ├── Exceptions.php │ │ ├── Extension/ │ │ │ ├── Extension.php │ │ │ ├── FeedWidget.php │ │ │ ├── File.php │ │ │ ├── IWidget.php │ │ │ ├── IWidgetContext.php │ │ │ ├── Index.php │ │ │ ├── Widget.php │ │ │ ├── WidgetContext.php │ │ │ ├── WidgetManager.php │ │ │ ├── WidgetManagerDecorator.php │ │ │ └── WidgetRendererDecorator.php │ │ ├── FileTextSearch.php │ │ ├── GeoLocation.php │ │ ├── GeoMap.php │ │ ├── GeoMapLocation.php │ │ ├── GeoMapLocationContent.php │ │ ├── GeoMapLocationLanguage.php │ │ ├── GeoMultimedia.php │ │ ├── GeoNames.php │ │ ├── GeoPreferences.php │ │ ├── IGeoLocation.php │ │ ├── IGeoMap.php │ │ ├── IGeoMapLocation.php │ │ ├── IGeoMapLocationContent.php │ │ ├── IGeoMapLocationLanguage.php │ │ ├── IGeoMultimedia.php │ │ ├── IPAccess.php │ │ ├── Image.php │ │ ├── ImageSearch.php │ │ ├── Input.php │ │ ├── Issue.php │ │ ├── IssuePublish.php │ │ ├── Language.php │ │ ├── LiveUserMock.php │ │ ├── Log.php │ │ ├── LoginAttempts.php │ │ ├── ModuleConfiguration.php │ │ ├── ObjectType.php │ │ ├── Plupload.php │ │ ├── Publication.php │ │ ├── Request.php │ │ ├── RequestObject.php │ │ ├── RequestStats.php │ │ ├── SQLSelectClause.php │ │ ├── SaaS.php │ │ ├── Section.php │ │ ├── SecurityToken.php │ │ ├── ServerRequest.php │ │ ├── Session.php │ │ ├── SessionRequest.php │ │ ├── ShortURL.php │ │ ├── SimplePager.php │ │ ├── Statistics.php │ │ ├── Subscription.php │ │ ├── SubscriptionDefaultTime.php │ │ ├── SubscriptionSection.php │ │ ├── Template.php │ │ ├── TemplateConverter.php │ │ ├── TemplateConverterHelper.php │ │ ├── TemplateConverterIfBlock.php │ │ ├── TemplateConverterListObject.php │ │ ├── TemplateConverterNewscoop.php │ │ ├── TimeUnit.php │ │ ├── Translation.php │ │ ├── UrlType.php │ │ ├── User.php │ │ ├── UserType.php │ │ ├── XR_CcClient.php │ │ ├── browser_detection.php │ │ └── cache/ │ │ ├── CacheEngine.php │ │ ├── CacheEngine_APC.php │ │ ├── TemplateCacheHandler.php │ │ └── TemplateCacheHandler_DB.php │ ├── composer.json │ ├── conf/ │ │ ├── install_conf.php │ │ └── saas_config_sample.php │ ├── constants.php │ ├── db_connect.php │ ├── docs/ │ │ ├── INSTALL-ubuntu.md │ │ ├── README.md │ │ ├── UPGRADE_4_3.md │ │ ├── UPGRADE_4_4.md │ │ └── UPGRADE_BELOW_4_2_3.md │ ├── extensions/ │ │ ├── article-lists/ │ │ │ ├── ArticleDiagramsWidget.php │ │ │ ├── ArticlesWidget.php │ │ │ ├── MostPopularArticlesWidget.php │ │ │ ├── PendingArticlesWidget.php │ │ │ ├── RecentlyModifiedArticlesWidget.php │ │ │ ├── RecentlyPublishedArticlesWidget.php │ │ │ ├── SubmittedArticlesWidget.php │ │ │ ├── YourArticlesWidget.php │ │ │ ├── article-lists.ini │ │ │ └── diagrams.phtml │ │ ├── feed-reader/ │ │ │ ├── FeedReader.php │ │ │ └── feed-reader.ini │ │ ├── hello-world/ │ │ │ └── HelloWorld.php │ │ ├── media-archive/ │ │ │ ├── ImageListWidget.php │ │ │ ├── MediaListWidget.php │ │ │ └── media-archive.ini │ │ ├── sourcefabric/ │ │ │ ├── SourcefabricDevFeed.php │ │ │ ├── SourcefabricFeed.php │ │ │ ├── SourcefabricNewsletter.php │ │ │ ├── newsletterbox.phtml │ │ │ └── sourcefabric.ini │ │ └── wikipedia/ │ │ ├── SearchWikipedia.php │ │ └── search.phtml │ ├── htaccess.dist │ ├── images/ │ │ └── .gitignore │ ├── include/ │ │ ├── Archive/ │ │ │ └── Tar.php │ │ ├── Console/ │ │ │ └── Getopt.php │ │ ├── Date/ │ │ │ ├── Calc.php │ │ │ ├── Human.php │ │ │ ├── Span.php │ │ │ └── TimeZone.php │ │ ├── Date.php │ │ ├── Event/ │ │ │ ├── Dispatcher.php │ │ │ └── Notification.php │ │ ├── File/ │ │ │ ├── CSV.php │ │ │ ├── Find.php │ │ │ └── Util.php │ │ ├── File.php │ │ ├── Mail/ │ │ │ ├── RFC822.php │ │ │ ├── mail.php │ │ │ ├── mime.php │ │ │ ├── mimeDecode.php │ │ │ ├── mimePart.php │ │ │ ├── mock.php │ │ │ ├── null.php │ │ │ ├── sendmail.php │ │ │ ├── smtp.php │ │ │ └── smtpmx.php │ │ ├── Mail.php │ │ ├── Net/ │ │ │ ├── SMTP.php │ │ │ ├── Socket.php │ │ │ └── URL.php │ │ ├── OS/ │ │ │ └── Guess.php │ │ ├── PEAR/ │ │ │ ├── Autoloader.php │ │ │ ├── Builder.php │ │ │ ├── ChannelFile/ │ │ │ │ └── Parser.php │ │ │ ├── ChannelFile.php │ │ │ ├── Command/ │ │ │ │ ├── Auth.php │ │ │ │ ├── Auth.xml │ │ │ │ ├── Build.php │ │ │ │ ├── Build.xml │ │ │ │ ├── Channels.php │ │ │ │ ├── Channels.xml │ │ │ │ ├── Common.php │ │ │ │ ├── Config.php │ │ │ │ ├── Config.xml │ │ │ │ ├── Install.php │ │ │ │ ├── Install.xml │ │ │ │ ├── Mirror.php │ │ │ │ ├── Mirror.xml │ │ │ │ ├── Package.php │ │ │ │ ├── Package.xml │ │ │ │ ├── Pickle.php │ │ │ │ ├── Pickle.xml │ │ │ │ ├── Registry.php │ │ │ │ ├── Registry.xml │ │ │ │ ├── Remote.php │ │ │ │ ├── Remote.xml │ │ │ │ ├── Test.php │ │ │ │ └── Test.xml │ │ │ ├── Command.php │ │ │ ├── Common.php │ │ │ ├── Config.php │ │ │ ├── Dependency2.php │ │ │ ├── DependencyDB.php │ │ │ ├── Downloader/ │ │ │ │ └── Package.php │ │ │ ├── Downloader.php │ │ │ ├── ErrorStack.php │ │ │ ├── Exception.php │ │ │ ├── FixPHP5PEARWarnings.php │ │ │ ├── Frontend/ │ │ │ │ └── CLI.php │ │ │ ├── Frontend.php │ │ │ ├── Installer/ │ │ │ │ ├── Role/ │ │ │ │ │ ├── Cfg.php │ │ │ │ │ ├── Cfg.xml │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── Data.php │ │ │ │ │ ├── Data.xml │ │ │ │ │ ├── Doc.php │ │ │ │ │ ├── Doc.xml │ │ │ │ │ ├── Ext.php │ │ │ │ │ ├── Ext.xml │ │ │ │ │ ├── Php.php │ │ │ │ │ ├── Php.xml │ │ │ │ │ ├── Script.php │ │ │ │ │ ├── Script.xml │ │ │ │ │ ├── Src.php │ │ │ │ │ ├── Src.xml │ │ │ │ │ ├── Test.php │ │ │ │ │ ├── Test.xml │ │ │ │ │ ├── Www.php │ │ │ │ │ └── Www.xml │ │ │ │ └── Role.php │ │ │ ├── Installer.php │ │ │ ├── PackageFile/ │ │ │ │ ├── Generator/ │ │ │ │ │ ├── v1.php │ │ │ │ │ └── v2.php │ │ │ │ ├── Parser/ │ │ │ │ │ ├── v1.php │ │ │ │ │ └── v2.php │ │ │ │ ├── v1.php │ │ │ │ ├── v2/ │ │ │ │ │ ├── Validator.php │ │ │ │ │ └── rw.php │ │ │ │ └── v2.php │ │ │ ├── PackageFile.php │ │ │ ├── Packager.php │ │ │ ├── REST/ │ │ │ │ ├── 10.php │ │ │ │ ├── 11.php │ │ │ │ └── 13.php │ │ │ ├── REST.php │ │ │ ├── Registry.php │ │ │ ├── RunTest.php │ │ │ ├── Task/ │ │ │ │ ├── Common.php │ │ │ │ ├── Postinstallscript/ │ │ │ │ │ └── rw.php │ │ │ │ ├── Postinstallscript.php │ │ │ │ ├── Replace/ │ │ │ │ │ └── rw.php │ │ │ │ ├── Replace.php │ │ │ │ ├── Unixeol/ │ │ │ │ │ └── rw.php │ │ │ │ ├── Unixeol.php │ │ │ │ ├── Windowseol/ │ │ │ │ │ └── rw.php │ │ │ │ └── Windowseol.php │ │ │ ├── Validate.php │ │ │ ├── Validator/ │ │ │ │ └── PECL.php │ │ │ └── XMLParser.php │ │ ├── PEAR.php │ │ ├── PEAR5.php │ │ ├── System.php │ │ ├── XML/ │ │ │ ├── Parser/ │ │ │ │ └── Simple.php │ │ │ ├── Parser.php │ │ │ ├── Serializer.php │ │ │ ├── Unserializer.php │ │ │ └── Util.php │ │ ├── campsite_constants.php │ │ ├── campsite_init.php │ │ ├── captcha/ │ │ │ ├── fonts/ │ │ │ │ ├── COPYRIGHT.TXT │ │ │ │ ├── README.TXT │ │ │ │ ├── RELEASENOTES.TXT │ │ │ │ └── local.conf │ │ │ ├── image.php │ │ │ └── php-captcha.inc.php │ │ ├── crypto/ │ │ │ └── rc4Encrypt.php │ │ ├── data/ │ │ │ ├── Mail_Mime/ │ │ │ │ ├── xmail.dtd │ │ │ │ └── xmail.xsl │ │ │ ├── PEAR/ │ │ │ │ ├── package.dtd │ │ │ │ └── template.spec │ │ │ └── XML_Serializer/ │ │ │ └── doc/ │ │ │ └── todo.txt │ │ ├── html2pdf/ │ │ │ ├── _LGPL.txt │ │ │ ├── _changelog.txt │ │ │ ├── _class/ │ │ │ │ ├── exception.class.php │ │ │ │ ├── locale.class.php │ │ │ │ ├── myPdf.class.php │ │ │ │ ├── parsingCss.class.php │ │ │ │ ├── parsingHtml.class.php │ │ │ │ └── tcpdfConfig.php │ │ │ ├── _lisez_moi.txt │ │ │ ├── _read_me.txt │ │ │ ├── _tcpdf_5.0.002/ │ │ │ │ ├── 2dbarcodes.php │ │ │ │ ├── CHANGELOG.TXT │ │ │ │ ├── LICENSE.TXT │ │ │ │ ├── README.TXT │ │ │ │ ├── barcodes.php │ │ │ │ ├── cache/ │ │ │ │ │ ├── chapter_demo_1.txt │ │ │ │ │ ├── chapter_demo_2.txt │ │ │ │ │ ├── table_data_demo.txt │ │ │ │ │ └── utf8test.txt │ │ │ │ ├── config/ │ │ │ │ │ ├── lang/ │ │ │ │ │ │ ├── bra.php │ │ │ │ │ │ ├── eng.php │ │ │ │ │ │ ├── ger.php │ │ │ │ │ │ └── ita.php │ │ │ │ │ ├── tcpdf_config.php │ │ │ │ │ └── tcpdf_config_alt.php │ │ │ │ ├── doc/ │ │ │ │ │ └── read_me.txt │ │ │ │ ├── examples/ │ │ │ │ │ └── read_me.txt │ │ │ │ ├── fonts/ │ │ │ │ │ ├── README.TXT │ │ │ │ │ ├── ZarBold.ctg.z │ │ │ │ │ ├── ZarBold.z │ │ │ │ │ ├── almohanad.ctg.z │ │ │ │ │ ├── almohanad.php │ │ │ │ │ ├── almohanad.z │ │ │ │ │ ├── arialunicid0.php │ │ │ │ │ ├── courier.php │ │ │ │ │ ├── dejavu-fonts-ttf-2.30/ │ │ │ │ │ │ ├── AUTHORS │ │ │ │ │ │ ├── BUGS │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── NEWS │ │ │ │ │ │ ├── README │ │ │ │ │ │ ├── langcover.txt │ │ │ │ │ │ ├── status.txt │ │ │ │ │ │ └── unicover.txt │ │ │ │ │ ├── dejavusans.ctg.z │ │ │ │ │ ├── dejavusans.php │ │ │ │ │ ├── dejavusans.z │ │ │ │ │ ├── dejavusansb.ctg.z │ │ │ │ │ ├── dejavusansb.php │ │ │ │ │ ├── dejavusansb.z │ │ │ │ │ ├── dejavusansbi.ctg.z │ │ │ │ │ ├── dejavusansbi.php │ │ │ │ │ ├── dejavusansbi.z │ │ │ │ │ ├── dejavusanscondensed.ctg.z │ │ │ │ │ ├── dejavusanscondensed.php │ │ │ │ │ ├── dejavusanscondensed.z │ │ │ │ │ ├── dejavusanscondensedb.ctg.z │ │ │ │ │ ├── dejavusanscondensedb.php │ │ │ │ │ ├── dejavusanscondensedb.z │ │ │ │ │ ├── dejavusanscondensedbi.ctg.z │ │ │ │ │ ├── dejavusanscondensedbi.php │ │ │ │ │ ├── dejavusanscondensedbi.z │ │ │ │ │ ├── dejavusanscondensedi.ctg.z │ │ │ │ │ ├── dejavusanscondensedi.php │ │ │ │ │ ├── dejavusanscondensedi.z │ │ │ │ │ ├── dejavusansi.ctg.z │ │ │ │ │ ├── dejavusansi.php │ │ │ │ │ ├── dejavusansi.z │ │ │ │ │ ├── dejavusansmono.ctg.z │ │ │ │ │ ├── dejavusansmono.php │ │ │ │ │ ├── dejavusansmono.z │ │ │ │ │ ├── dejavusansmonob.ctg.z │ │ │ │ │ ├── dejavusansmonob.php │ │ │ │ │ ├── dejavusansmonob.z │ │ │ │ │ ├── dejavusansmonobi.ctg.z │ │ │ │ │ ├── dejavusansmonobi.php │ │ │ │ │ ├── dejavusansmonobi.z │ │ │ │ │ ├── dejavusansmonoi.ctg.z │ │ │ │ │ ├── dejavusansmonoi.php │ │ │ │ │ ├── dejavusansmonoi.z │ │ │ │ │ ├── dejavuserif.ctg.z │ │ │ │ │ ├── dejavuserif.php │ │ │ │ │ ├── dejavuserif.z │ │ │ │ │ ├── dejavuserifb.ctg.z │ │ │ │ │ ├── dejavuserifb.php │ │ │ │ │ ├── dejavuserifb.z │ │ │ │ │ ├── dejavuserifbi.ctg.z │ │ │ │ │ ├── dejavuserifbi.php │ │ │ │ │ ├── dejavuserifbi.z │ │ │ │ │ ├── dejavuserifcondensed.ctg.z │ │ │ │ │ ├── dejavuserifcondensed.php │ │ │ │ │ ├── dejavuserifcondensed.z │ │ │ │ │ ├── dejavuserifcondensedb.ctg.z │ │ │ │ │ ├── dejavuserifcondensedb.php │ │ │ │ │ ├── dejavuserifcondensedb.z │ │ │ │ │ ├── dejavuserifcondensedbi.ctg.z │ │ │ │ │ ├── dejavuserifcondensedbi.php │ │ │ │ │ ├── dejavuserifcondensedbi.z │ │ │ │ │ ├── dejavuserifcondensedi.ctg.z │ │ │ │ │ ├── dejavuserifcondensedi.php │ │ │ │ │ ├── dejavuserifcondensedi.z │ │ │ │ │ ├── dejavuserifi.ctg.z │ │ │ │ │ ├── dejavuserifi.php │ │ │ │ │ ├── dejavuserifi.z │ │ │ │ │ ├── freefont-20090104/ │ │ │ │ │ │ ├── AUTHORS │ │ │ │ │ │ ├── COPYING │ │ │ │ │ │ ├── CREDITS │ │ │ │ │ │ ├── ChangeLog │ │ │ │ │ │ ├── INSTALL │ │ │ │ │ │ └── README │ │ │ │ │ ├── freemono.ctg.z │ │ │ │ │ ├── freemono.php │ │ │ │ │ ├── freemono.z │ │ │ │ │ ├── freemonob.ctg.z │ │ │ │ │ ├── freemonob.php │ │ │ │ │ ├── freemonob.z │ │ │ │ │ ├── freemonobi.ctg.z │ │ │ │ │ ├── freemonobi.php │ │ │ │ │ ├── freemonobi.z │ │ │ │ │ ├── freemonoi.ctg.z │ │ │ │ │ ├── freemonoi.php │ │ │ │ │ ├── freemonoi.z │ │ │ │ │ ├── freesans.ctg.z │ │ │ │ │ ├── freesans.php │ │ │ │ │ ├── freesans.z │ │ │ │ │ ├── freesansb.ctg.z │ │ │ │ │ ├── freesansb.php │ │ │ │ │ ├── freesansb.z │ │ │ │ │ ├── freesansbi.ctg.z │ │ │ │ │ ├── freesansbi.php │ │ │ │ │ ├── freesansbi.z │ │ │ │ │ ├── freesansi.ctg.z │ │ │ │ │ ├── freesansi.php │ │ │ │ │ ├── freesansi.z │ │ │ │ │ ├── freeserif.ctg.z │ │ │ │ │ ├── freeserif.php │ │ │ │ │ ├── freeserif.z │ │ │ │ │ ├── freeserifb.ctg.z │ │ │ │ │ ├── freeserifb.php │ │ │ │ │ ├── freeserifb.z │ │ │ │ │ ├── freeserifbi.ctg.z │ │ │ │ │ ├── freeserifbi.php │ │ │ │ │ ├── freeserifbi.z │ │ │ │ │ ├── freeserifi.ctg.z │ │ │ │ │ ├── freeserifi.php │ │ │ │ │ ├── freeserifi.z │ │ │ │ │ ├── helvetica.php │ │ │ │ │ ├── helveticab.php │ │ │ │ │ ├── helveticabi.php │ │ │ │ │ ├── helveticai.php │ │ │ │ │ ├── hysmyeongjostdmedium.php │ │ │ │ │ ├── kozgopromedium.php │ │ │ │ │ ├── kozminproregular.php │ │ │ │ │ ├── msungstdlight.php │ │ │ │ │ ├── stsongstdlight.php │ │ │ │ │ ├── symbol.php │ │ │ │ │ ├── times.php │ │ │ │ │ ├── timesb.php │ │ │ │ │ ├── timesbi.php │ │ │ │ │ ├── timesi.php │ │ │ │ │ ├── uni2cid_ac15.php │ │ │ │ │ ├── uni2cid_ag15.php │ │ │ │ │ ├── uni2cid_aj16.php │ │ │ │ │ ├── uni2cid_ak12.php │ │ │ │ │ ├── zapfdingbats.php │ │ │ │ │ └── zarbold.php │ │ │ │ ├── htmlcolors.php │ │ │ │ ├── images/ │ │ │ │ │ └── read_me.txt │ │ │ │ ├── qrcode.php │ │ │ │ ├── tcpdf.crt │ │ │ │ ├── tcpdf.fdf │ │ │ │ ├── tcpdf.php │ │ │ │ └── unicode_data.php │ │ │ ├── html2pdf.class.php │ │ │ └── locale/ │ │ │ ├── ca.csv │ │ │ ├── cs.csv │ │ │ ├── da.csv │ │ │ ├── de.csv │ │ │ ├── en.csv │ │ │ ├── es.csv │ │ │ ├── fr.csv │ │ │ ├── it.csv │ │ │ ├── nl.csv │ │ │ ├── pt.csv │ │ │ └── tr.csv │ │ ├── mime_content_type.php │ │ ├── pearcmd.php │ │ ├── peclcmd.php │ │ ├── smarty/ │ │ │ └── campsite_plugins/ │ │ │ ├── block.assetic.php │ │ │ ├── block.comment_form.php │ │ │ ├── block.dynamic.php │ │ │ ├── block.form_topics.php │ │ │ ├── block.image.php │ │ │ ├── block.list_article_attachments.php │ │ │ ├── block.list_article_authors.php │ │ │ ├── block.list_article_comments.php │ │ │ ├── block.list_article_images.php │ │ │ ├── block.list_article_locations.php │ │ │ ├── block.list_article_topics.php │ │ │ ├── block.list_articles.php │ │ │ ├── block.list_images.php │ │ │ ├── block.list_issues.php │ │ │ ├── block.list_languages.php │ │ │ ├── block.list_map_articles.php │ │ │ ├── block.list_map_locations.php │ │ │ ├── block.list_playlist_articles.php │ │ │ ├── block.list_related_articles.php │ │ │ ├── block.list_search_results.php │ │ │ ├── block.list_section_authors.php │ │ │ ├── block.list_sections.php │ │ │ ├── block.list_slideshow_items.php │ │ │ ├── block.list_slideshows.php │ │ │ ├── block.list_subtitles.php │ │ │ ├── block.list_subtopics.php │ │ │ ├── block.list_user_comments.php │ │ │ ├── block.list_user_topics.php │ │ │ ├── block.list_users.php │ │ │ ├── block.local.php │ │ │ ├── block.login_form.php │ │ │ ├── block.search_form.php │ │ │ ├── block.subscription_form.php │ │ │ ├── block.tr.php │ │ │ ├── block.user_form.php │ │ │ ├── cacheresource.newscoop.php │ │ │ ├── function.article_pdf.php │ │ │ ├── function.breadcrumb.php │ │ │ ├── function.calendar.php │ │ │ ├── function.camp_edit.php │ │ │ ├── function.camp_select.php │ │ │ ├── function.captcha_image_link.php │ │ │ ├── function.count.php │ │ │ ├── function.disable_html_encoding.php │ │ │ ├── function.enable_html_encoding.php │ │ │ ├── function.form_hidden.php │ │ │ ├── function.form_register.php │ │ │ ├── function.form_submit.php │ │ │ ├── function.form_text.php │ │ │ ├── function.formparameters.php │ │ │ ├── function.generate_edit_uri.php │ │ │ ├── function.generate_url.php │ │ │ ├── function.get_request_param.php │ │ │ ├── function.get_resource_id.php │ │ │ ├── function.link_follow_topic.php │ │ │ ├── function.listpagination.php │ │ │ ├── function.map.php │ │ │ ├── function.omnibox.php │ │ │ ├── function.render.php │ │ │ ├── function.set_article.php │ │ │ ├── function.set_current_issue.php │ │ │ ├── function.set_default_article.php │ │ │ ├── function.set_default_issue.php │ │ │ ├── function.set_default_language.php │ │ │ ├── function.set_default_publication.php │ │ │ ├── function.set_default_section.php │ │ │ ├── function.set_default_topic.php │ │ │ ├── function.set_http_response_code.php │ │ │ ├── function.set_issue.php │ │ │ ├── function.set_language.php │ │ │ ├── function.set_map.php │ │ │ ├── function.set_placeholder.php │ │ │ ├── function.set_publication.php │ │ │ ├── function.set_section.php │ │ │ ├── function.set_topic.php │ │ │ ├── function.unset_article.php │ │ │ ├── function.unset_comment.php │ │ │ ├── function.unset_issue.php │ │ │ ├── function.unset_language.php │ │ │ ├── function.unset_map.php │ │ │ ├── function.unset_publication.php │ │ │ ├── function.unset_section.php │ │ │ ├── function.unset_topic.php │ │ │ ├── function.uri.php │ │ │ ├── function.uripath.php │ │ │ ├── function.url.php │ │ │ ├── function.urlparameters.php │ │ │ ├── function.video_player.php │ │ │ ├── function.wrap_in_element.php │ │ │ ├── modifier.bbcode.php │ │ │ ├── modifier.camp_date_format.php │ │ │ ├── modifier.camp_filesize_format.php │ │ │ ├── modifier.create_links.php │ │ │ ├── modifier.dump.php │ │ │ ├── modifier.obfuscate_email.php │ │ │ ├── modifier.teaser.php │ │ │ ├── modifier.translate.php │ │ │ └── modifier.truncate_utf8.php │ │ └── versions.txt │ ├── index.php │ ├── install/ │ │ ├── .htaccess │ │ ├── Resources/ │ │ │ ├── assets/ │ │ │ │ └── css/ │ │ │ │ └── main.css │ │ │ ├── sample_data/ │ │ │ │ └── files/ │ │ │ │ ├── 0000/ │ │ │ │ │ └── 0000/ │ │ │ │ │ ├── 000000007.oga │ │ │ │ │ ├── 000000008.flv │ │ │ │ │ ├── 000000009.flv │ │ │ │ │ └── 000000010.ogv │ │ │ │ └── placeholder │ │ │ ├── sql/ │ │ │ │ ├── CityLocations.csv │ │ │ │ ├── CityNames.csv │ │ │ │ ├── campsite_core.sql │ │ │ │ ├── campsite_demo_data.sql │ │ │ │ ├── geonames.sql │ │ │ │ └── upgrade/ │ │ │ │ ├── 4.2.x/ │ │ │ │ │ ├── 2013-02-19/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2013.03.06/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2013.05.06/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2013.05.28/ │ │ │ │ │ │ ├── move_files.php │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2013.05.29/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ └── 2013.06.13/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 4.3.x/ │ │ │ │ │ ├── 2013.08.20/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2013.11.21/ │ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2013.12.16/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.01.11/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.01.13/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.01.14/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.01.21/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.01.24/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.02.07/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.02.11/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.03.04/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.03.10/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.03.12/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.04.11/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.05.09/ │ │ │ │ │ │ └── data-required.sql │ │ │ │ │ ├── 2014.05.13/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.05.21/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.06.06/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.06.10/ │ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.06.11/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.06.12/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.07.21/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.07.28/ │ │ │ │ │ │ └── data-required.sql │ │ │ │ │ ├── 2014.07.29/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.07.30/ │ │ │ │ │ │ ├── cronjobs.php │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.08.11/ │ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.09.22/ │ │ │ │ │ │ ├── auto_delete_diff.txt │ │ │ │ │ │ ├── delete_diff.txt │ │ │ │ │ │ ├── tables.sql │ │ │ │ │ │ └── upgrade.php │ │ │ │ │ ├── 2014.09.23/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.09.24/ │ │ │ │ │ │ ├── plugins.php │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.09.25/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.10.14/ │ │ │ │ │ │ ├── htaccess.php │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2014.10.16/ │ │ │ │ │ │ └── data-required.sql │ │ │ │ │ ├── 2014.12.01/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ ├── 2015.01.21/ │ │ │ │ │ │ └── tables.sql │ │ │ │ │ └── 2015.03.23/ │ │ │ │ │ └── data-required.sql │ │ │ │ └── 4.4.x/ │ │ │ │ ├── 2014.11.05/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2014.11.17/ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2014.11.22/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2014.12.02/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2014.12.17/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.02.12/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.02.19/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.02.24/ │ │ │ │ │ ├── add_client.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.03.02/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.03.11/ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ ├── tables.sql │ │ │ │ │ └── topics.php │ │ │ │ ├── 2015.03.12/ │ │ │ │ │ ├── authors.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.03.13/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.03.14/ │ │ │ │ │ ├── delete.php │ │ │ │ │ ├── diff.txt │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.03.18/ │ │ │ │ │ └── data-required.sql │ │ │ │ ├── 2015.03.19/ │ │ │ │ │ ├── init_order_in_playlists.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.04.13/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.04.15/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.04.16/ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ ├── playlist.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.04.21/ │ │ │ │ │ ├── delete.php │ │ │ │ │ ├── diff.txt │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.05.07/ │ │ │ │ │ ├── client.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.05.15/ │ │ │ │ │ └── data-required.sql │ │ │ │ ├── 2015.05.16/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.05.28/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.03/ │ │ │ │ │ ├── playlist_article.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.08/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.09/ │ │ │ │ │ ├── remove_index.php │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.15/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.16/ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.24/ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.06.30/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.08.10/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.08.24/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2015.09.11/ │ │ │ │ │ └── data-required.sql │ │ │ │ ├── 2015.09.15/ │ │ │ │ │ └── data-required.sql │ │ │ │ ├── 2015.10.15/ │ │ │ │ │ ├── data-required.sql │ │ │ │ │ ├── tables.sql │ │ │ │ │ └── topic_translations.php │ │ │ │ ├── 2015.10.29/ │ │ │ │ │ └── tables.sql │ │ │ │ ├── 2016.03.30/ │ │ │ │ │ └── tables.sql │ │ │ │ └── 2016.05.04/ │ │ │ │ └── tables.sql │ │ │ ├── templates/ │ │ │ │ ├── _configuration.twig │ │ │ │ └── _database_conf.twig │ │ │ └── views/ │ │ │ ├── botstrap_errors.twig │ │ │ ├── demo.twig │ │ │ ├── index.twig │ │ │ ├── layout.twig │ │ │ ├── license.twig │ │ │ ├── post-process.twig │ │ │ ├── prepare.twig │ │ │ ├── process.twig │ │ │ ├── upgrade/ │ │ │ │ ├── errors.twig │ │ │ │ └── success.twig │ │ │ └── upgrade_layout.twig │ │ ├── SymfonyRequirements.php │ │ └── index.php │ ├── js/ │ │ ├── admin.js │ │ ├── app/ │ │ │ ├── .htaccess │ │ │ ├── 404.js │ │ │ └── admin/ │ │ │ ├── _shared.js │ │ │ └── themes/ │ │ │ ├── advanced-theme-settings.js │ │ │ └── index.js │ │ ├── apps/ │ │ │ └── users.js │ │ ├── backbone.js │ │ ├── base64.js │ │ ├── bootstrap.js │ │ ├── campsite-audiosearch.js │ │ ├── campsite-checkbox.js │ │ ├── campsite.js │ │ ├── crypt.js │ │ ├── domTT/ │ │ │ ├── .ant-targets-build.xml │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── alphaAPI.js │ │ │ ├── domLib.js │ │ │ ├── domTT.js │ │ │ ├── domTT_drag.js │ │ │ └── fadomatic.js │ │ ├── editarea/ │ │ │ ├── change_log.txt │ │ │ ├── edit_area/ │ │ │ │ ├── autocompletion.js │ │ │ │ ├── edit_area.css │ │ │ │ ├── edit_area.js │ │ │ │ ├── edit_area_compressor.php │ │ │ │ ├── edit_area_full.js │ │ │ │ ├── edit_area_functions.js │ │ │ │ ├── edit_area_loader.js │ │ │ │ ├── elements_functions.js │ │ │ │ ├── highlight.js │ │ │ │ ├── keyboard.js │ │ │ │ ├── langs/ │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── dk.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sk.js │ │ │ │ │ └── zh.js │ │ │ │ ├── license_apache.txt │ │ │ │ ├── license_bsd.txt │ │ │ │ ├── license_lgpl.txt │ │ │ │ ├── manage_area.js │ │ │ │ ├── plugins/ │ │ │ │ │ ├── charmap/ │ │ │ │ │ │ ├── charmap.js │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ └── charmap.css │ │ │ │ │ │ ├── jscripts/ │ │ │ │ │ │ │ └── map.js │ │ │ │ │ │ ├── langs/ │ │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ │ ├── dk.js │ │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ │ ├── mk.js │ │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ │ └── zh.js │ │ │ │ │ │ └── popup.html │ │ │ │ │ └── test/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── test.css │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── dk.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ ├── mk.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ └── zh.js │ │ │ │ │ ├── test.js │ │ │ │ │ └── test2.js │ │ │ │ ├── reg_syntax/ │ │ │ │ │ ├── basic.js │ │ │ │ │ ├── brainfuck.js │ │ │ │ │ ├── c.js │ │ │ │ │ ├── coldfusion.js │ │ │ │ │ ├── cpp.js │ │ │ │ │ ├── css.js │ │ │ │ │ ├── html.js │ │ │ │ │ ├── java.js │ │ │ │ │ ├── js.js │ │ │ │ │ ├── pas.js │ │ │ │ │ ├── perl.js │ │ │ │ │ ├── php.js │ │ │ │ │ ├── python.js │ │ │ │ │ ├── robotstxt.js │ │ │ │ │ ├── ruby.js │ │ │ │ │ ├── smarty.js │ │ │ │ │ ├── sql.js │ │ │ │ │ ├── tsql.js │ │ │ │ │ ├── vb.js │ │ │ │ │ └── xml.js │ │ │ │ ├── reg_syntax.js │ │ │ │ ├── regexp.js │ │ │ │ ├── resize_area.js │ │ │ │ ├── search_replace.js │ │ │ │ └── template.html │ │ │ ├── license_apache.txt │ │ │ ├── license_bsd.txt │ │ │ ├── license_lgpl.txt │ │ │ ├── smarty.js │ │ │ └── todo.txt │ │ ├── fValidate/ │ │ │ ├── fValidate.basic.js │ │ │ ├── fValidate.config.js │ │ │ ├── fValidate.controls.js │ │ │ ├── fValidate.core.js │ │ │ ├── fValidate.datetime.js │ │ │ ├── fValidate.ecommerce.js │ │ │ ├── fValidate.extended.js │ │ │ ├── fValidate.international.js │ │ │ ├── fValidate.lang-enUS.js │ │ │ ├── fValidate.logical.js │ │ │ ├── fValidate.numbers.js │ │ │ ├── fValidate.special.js │ │ │ ├── fValidate.validators.js │ │ │ ├── fValidate.web.js │ │ │ └── readme.txt │ │ ├── flowplayer/ │ │ │ ├── LICENSE.txt │ │ │ ├── README.txt │ │ │ ├── example/ │ │ │ │ ├── index.html │ │ │ │ └── style.css │ │ │ ├── flowplayer-3.2.5.swf │ │ │ └── flowplayer.controls-3.2.3.swf │ │ ├── geocoding/ │ │ │ ├── country_cens.js │ │ │ ├── country_codes.js │ │ │ ├── geonames/ │ │ │ │ ├── notice.txt │ │ │ │ └── search.js │ │ │ ├── location_chooser.js │ │ │ ├── map_filter.js │ │ │ ├── map_popups.js │ │ │ ├── map_preview.js │ │ │ ├── map_search.js │ │ │ ├── markers/ │ │ │ │ ├── marker-blue.ini │ │ │ │ ├── marker-gold.ini │ │ │ │ ├── marker-green.ini │ │ │ │ ├── marker-red.ini │ │ │ │ └── special/ │ │ │ │ └── unknown.ini │ │ │ ├── openlayers/ │ │ │ │ ├── OLlocals.js │ │ │ │ ├── OpenLayers.js │ │ │ │ ├── license.txt │ │ │ │ └── theme/ │ │ │ │ └── default/ │ │ │ │ ├── framedCloud.css │ │ │ │ ├── google.css │ │ │ │ ├── ie6-style.css │ │ │ │ └── style.css │ │ │ └── styles/ │ │ │ └── map-info.css │ │ ├── jquery/ │ │ │ ├── doT.js │ │ │ ├── fancybox/ │ │ │ │ ├── jquery.fancybox-1.3.4.css │ │ │ │ └── jquery.fancybox-1.3.4.pack.js │ │ │ ├── feedback.js │ │ │ ├── fg.menu.js │ │ │ ├── i18n/ │ │ │ │ ├── index.html │ │ │ │ ├── jquery.ui.datepicker-af.js │ │ │ │ ├── jquery.ui.datepicker-ar.js │ │ │ │ ├── jquery.ui.datepicker-az.js │ │ │ │ ├── jquery.ui.datepicker-bg.js │ │ │ │ ├── jquery.ui.datepicker-bs.js │ │ │ │ ├── jquery.ui.datepicker-ca.js │ │ │ │ ├── jquery.ui.datepicker-cs.js │ │ │ │ ├── jquery.ui.datepicker-da.js │ │ │ │ ├── jquery.ui.datepicker-de-CH.js │ │ │ │ ├── jquery.ui.datepicker-de.js │ │ │ │ ├── jquery.ui.datepicker-el.js │ │ │ │ ├── jquery.ui.datepicker-en-GB.js │ │ │ │ ├── jquery.ui.datepicker-en.js │ │ │ │ ├── jquery.ui.datepicker-eo.js │ │ │ │ ├── jquery.ui.datepicker-es.js │ │ │ │ ├── jquery.ui.datepicker-et.js │ │ │ │ ├── jquery.ui.datepicker-eu.js │ │ │ │ ├── jquery.ui.datepicker-fa.js │ │ │ │ ├── jquery.ui.datepicker-fi.js │ │ │ │ ├── jquery.ui.datepicker-fo.js │ │ │ │ ├── jquery.ui.datepicker-fr-CH.js │ │ │ │ ├── jquery.ui.datepicker-fr.js │ │ │ │ ├── jquery.ui.datepicker-he.js │ │ │ │ ├── jquery.ui.datepicker-hr.js │ │ │ │ ├── jquery.ui.datepicker-hu.js │ │ │ │ ├── jquery.ui.datepicker-hy.js │ │ │ │ ├── jquery.ui.datepicker-id.js │ │ │ │ ├── jquery.ui.datepicker-is.js │ │ │ │ ├── jquery.ui.datepicker-it.js │ │ │ │ ├── jquery.ui.datepicker-ja.js │ │ │ │ ├── jquery.ui.datepicker-ka.js │ │ │ │ ├── jquery.ui.datepicker-ko.js │ │ │ │ ├── jquery.ui.datepicker-lt.js │ │ │ │ ├── jquery.ui.datepicker-lv.js │ │ │ │ ├── jquery.ui.datepicker-ms.js │ │ │ │ ├── jquery.ui.datepicker-nl-BE.js │ │ │ │ ├── jquery.ui.datepicker-nl.js │ │ │ │ ├── jquery.ui.datepicker-no.js │ │ │ │ ├── jquery.ui.datepicker-pl.js │ │ │ │ ├── jquery.ui.datepicker-pt-BR.js │ │ │ │ ├── jquery.ui.datepicker-pt.js │ │ │ │ ├── jquery.ui.datepicker-ro.js │ │ │ │ ├── jquery.ui.datepicker-ru.js │ │ │ │ ├── jquery.ui.datepicker-sk.js │ │ │ │ ├── jquery.ui.datepicker-sl.js │ │ │ │ ├── jquery.ui.datepicker-sq.js │ │ │ │ ├── jquery.ui.datepicker-sr-SR.js │ │ │ │ ├── jquery.ui.datepicker-sr.js │ │ │ │ ├── jquery.ui.datepicker-sv.js │ │ │ │ ├── jquery.ui.datepicker-ta.js │ │ │ │ ├── jquery.ui.datepicker-th.js │ │ │ │ ├── jquery.ui.datepicker-tr.js │ │ │ │ ├── jquery.ui.datepicker-uk.js │ │ │ │ ├── jquery.ui.datepicker-vi.js │ │ │ │ ├── jquery.ui.datepicker-zh-CN.js │ │ │ │ ├── jquery.ui.datepicker-zh-HK.js │ │ │ │ └── jquery.ui.datepicker-zh-TW.js │ │ │ ├── jCountable/ │ │ │ │ ├── jquery.jCountable.css │ │ │ │ └── jquery.jCountable.js │ │ │ ├── jquery-ui-required.txt │ │ │ ├── jquery.ba-iff.js │ │ │ ├── jquery.cookie.js │ │ │ ├── jquery.tmpl.js │ │ │ ├── jquery.version.js │ │ │ └── jquery.widgets.js │ │ ├── json2.js │ │ ├── newscoop_rest_api.js │ │ ├── omnibox.js │ │ ├── plupload/ │ │ │ ├── changelog.txt │ │ │ ├── js/ │ │ │ │ ├── jquery.plupload.queue/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── jquery.plupload.queue.css │ │ │ │ │ └── jquery.plupload.queue.js │ │ │ │ ├── jquery.ui.plupload/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── jquery.ui.plupload.css │ │ │ │ │ └── jquery.ui.plupload.js │ │ │ │ ├── plupload.browserplus.js │ │ │ │ ├── plupload.flash.js │ │ │ │ ├── plupload.flash.swf │ │ │ │ ├── plupload.full.js │ │ │ │ ├── plupload.gears.js │ │ │ │ ├── plupload.html4.js │ │ │ │ ├── plupload.html5.js │ │ │ │ ├── plupload.js │ │ │ │ ├── plupload.silverlight.js │ │ │ │ └── plupload.silverlight.xap │ │ │ ├── license.txt │ │ │ └── readme.md │ │ ├── raphael-min.js │ │ ├── scriptaculous/ │ │ │ ├── controls.js │ │ │ ├── dragdrop.js │ │ │ ├── effects.js │ │ │ ├── prototype.js │ │ │ ├── scriptaculous.js │ │ │ ├── unittest.js │ │ │ └── util.js │ │ ├── select2/ │ │ │ ├── select2.css │ │ │ └── select2.js │ │ ├── sha1.js │ │ ├── syntaxhighlighter/ │ │ │ ├── compass/ │ │ │ │ ├── _theme_template.scss │ │ │ │ ├── config.rb │ │ │ │ ├── shCore.scss │ │ │ │ ├── shCoreDefault.scss │ │ │ │ ├── shCoreDjango.scss │ │ │ │ ├── shCoreEclipse.scss │ │ │ │ ├── shCoreEmacs.scss │ │ │ │ ├── shCoreFadeToGrey.scss │ │ │ │ ├── shCoreMDUltra.scss │ │ │ │ ├── shCoreMidnight.scss │ │ │ │ ├── shCoreRDark.scss │ │ │ │ ├── shThemeDefault.scss │ │ │ │ ├── shThemeDjango.scss │ │ │ │ ├── shThemeEclipse.scss │ │ │ │ ├── shThemeEmacs.scss │ │ │ │ ├── shThemeFadeToGrey.scss │ │ │ │ ├── shThemeMDUltra.scss │ │ │ │ ├── shThemeMidnight.scss │ │ │ │ └── shThemeRDark.scss │ │ │ ├── scripts/ │ │ │ │ ├── shAutoloader.js │ │ │ │ ├── shBrushAS3.js │ │ │ │ ├── shBrushAppleScript.js │ │ │ │ ├── shBrushBash.js │ │ │ │ ├── shBrushCSharp.js │ │ │ │ ├── shBrushColdFusion.js │ │ │ │ ├── shBrushCpp.js │ │ │ │ ├── shBrushCss.js │ │ │ │ ├── shBrushDelphi.js │ │ │ │ ├── shBrushDiff.js │ │ │ │ ├── shBrushErlang.js │ │ │ │ ├── shBrushGroovy.js │ │ │ │ ├── shBrushJScript.js │ │ │ │ ├── shBrushJava.js │ │ │ │ ├── shBrushJavaFX.js │ │ │ │ ├── shBrushPerl.js │ │ │ │ ├── shBrushPhp.js │ │ │ │ ├── shBrushPlain.js │ │ │ │ ├── shBrushPowerShell.js │ │ │ │ ├── shBrushPython.js │ │ │ │ ├── shBrushRuby.js │ │ │ │ ├── shBrushSass.js │ │ │ │ ├── shBrushScala.js │ │ │ │ ├── shBrushSql.js │ │ │ │ ├── shBrushVb.js │ │ │ │ ├── shBrushXml.js │ │ │ │ ├── shCore.js │ │ │ │ └── shLegacy.js │ │ │ ├── src/ │ │ │ │ ├── shAutoloader.js │ │ │ │ ├── shCore.js │ │ │ │ └── shLegacy.js │ │ │ └── styles/ │ │ │ ├── shCore.css │ │ │ ├── shCoreDefault.css │ │ │ ├── shCoreDjango.css │ │ │ ├── shCoreEclipse.css │ │ │ ├── shCoreEmacs.css │ │ │ ├── shCoreFadeToGrey.css │ │ │ ├── shCoreMDUltra.css │ │ │ ├── shCoreMidnight.css │ │ │ ├── shCoreRDark.css │ │ │ ├── shThemeDefault.css │ │ │ ├── shThemeDjango.css │ │ │ ├── shThemeEclipse.css │ │ │ ├── shThemeEmacs.css │ │ │ ├── shThemeFadeToGrey.css │ │ │ ├── shThemeMDUltra.css │ │ │ ├── shThemeMidnight.css │ │ │ └── shThemeRDark.css │ │ ├── tapmodo-Jcrop-5e58bc9/ │ │ │ ├── MIT-LICENSE.txt │ │ │ ├── build/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README │ │ │ │ ├── minimize.bash │ │ │ │ └── pre-commit.bash │ │ │ ├── css/ │ │ │ │ └── jquery.Jcrop.css │ │ │ ├── demos/ │ │ │ │ ├── crop.php │ │ │ │ ├── demo_files/ │ │ │ │ │ └── demos.css │ │ │ │ ├── tutorial1.html │ │ │ │ ├── tutorial2.html │ │ │ │ ├── tutorial3.html │ │ │ │ ├── tutorial4.html │ │ │ │ └── tutorial5.html │ │ │ ├── index.html │ │ │ └── js/ │ │ │ ├── jquery.Jcrop.js │ │ │ └── jquery.color.js │ │ ├── tinymce/ │ │ │ ├── jquery.tinymce.js │ │ │ ├── langs/ │ │ │ │ ├── ar.js │ │ │ │ ├── az.js │ │ │ │ ├── be.js │ │ │ │ ├── cs.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── en.js │ │ │ │ ├── es.js │ │ │ │ ├── fr.js │ │ │ │ ├── he.js │ │ │ │ ├── hr.js │ │ │ │ ├── hu.js │ │ │ │ ├── hy.js │ │ │ │ ├── it.js │ │ │ │ ├── ka.js │ │ │ │ ├── ko.js │ │ │ │ ├── nb.js │ │ │ │ ├── nl.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sr.js │ │ │ │ ├── sv.js │ │ │ │ ├── tr.js │ │ │ │ ├── uk.js │ │ │ │ ├── zh-tw.js │ │ │ │ └── zh.js │ │ │ ├── license.txt │ │ │ ├── plugins/ │ │ │ │ ├── advhr/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── advhr.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── rule.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── rule.htm │ │ │ │ ├── advimage/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── advimage.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── image.htm │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── image.js │ │ │ │ │ └── langs/ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ └── zh_dlg.js │ │ │ │ ├── advlink/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── advlink.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── advlink.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── link.htm │ │ │ │ ├── advlist/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── autolink/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── autoresize/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── autosave/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ └── langs/ │ │ │ │ │ └── en.js │ │ │ │ ├── bbcode/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── campsiteattachment/ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ ├── dialog.js │ │ │ │ │ │ ├── images.js │ │ │ │ │ │ ├── manager.js │ │ │ │ │ │ └── popup.js │ │ │ │ │ ├── attachments.php │ │ │ │ │ ├── classes/ │ │ │ │ │ │ ├── AttachmentManager.php │ │ │ │ │ │ └── Files.php │ │ │ │ │ ├── config.inc.php │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── attachmentlist.css │ │ │ │ │ │ └── campsiteattachment.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── campsiteattachment.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ ├── be.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ └── zh.js │ │ │ │ │ └── popup.php │ │ │ │ ├── campsitebreak/ │ │ │ │ │ ├── campsitebreak.htm │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── campsitebreak.js │ │ │ │ │ └── langs/ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ └── sr_dlg.js │ │ │ │ ├── campsiteimage/ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ ├── dialog.js │ │ │ │ │ │ ├── images.js │ │ │ │ │ │ ├── manager.js │ │ │ │ │ │ └── popup.js │ │ │ │ │ ├── classes/ │ │ │ │ │ │ ├── Files.php │ │ │ │ │ │ └── ImageManager.php │ │ │ │ │ ├── config.inc.php │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── campsiteimage.css │ │ │ │ │ │ ├── campsiteinternallink.css │ │ │ │ │ │ └── imagelist.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── images.php │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── campsiteimage.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── popup.php │ │ │ │ ├── campsiteinternallink/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── campsiteinternallink.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── campsiteinternallink.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ ├── zh.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── link.php │ │ │ │ ├── campsitemedia/ │ │ │ │ │ ├── assets/ │ │ │ │ │ │ ├── dialog.js │ │ │ │ │ │ ├── images.js │ │ │ │ │ │ ├── manager.js │ │ │ │ │ │ └── popup.js │ │ │ │ │ ├── attachments.php │ │ │ │ │ ├── classes/ │ │ │ │ │ │ ├── AttachmentManager.php │ │ │ │ │ │ └── Files.php │ │ │ │ │ ├── config.inc.php │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── attachmentlist.css │ │ │ │ │ │ └── campsitemedia.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── campsitemedia.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ └── sr_dlg.js │ │ │ │ │ └── popup.php │ │ │ │ ├── codehighlighting/ │ │ │ │ │ ├── codehighlighting.htm │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── codehighlighting.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── codehighlighting.js │ │ │ │ │ └── langs/ │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── be.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── zh.js │ │ │ │ │ └── zh_TW.js │ │ │ │ ├── contextmenu/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── directionality/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── emotions/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── emotions.htm │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── emotions.js │ │ │ │ │ └── langs/ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ └── zh_dlg.js │ │ │ │ ├── example/ │ │ │ │ │ ├── dialog.htm │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── dialog.js │ │ │ │ │ └── langs/ │ │ │ │ │ ├── en.js │ │ │ │ │ └── en_dlg.js │ │ │ │ ├── example_dependency/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── fullpage/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── fullpage.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── fullpage.htm │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── fullpage.js │ │ │ │ │ └── langs/ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ └── zh_dlg.js │ │ │ │ ├── fullscreen/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ └── fullscreen.htm │ │ │ │ ├── iespell/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── iframe/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ ├── be.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── zh.js │ │ │ │ │ │ └── zh_TW.js │ │ │ │ │ └── window.html │ │ │ │ ├── inlinepopups/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── skins/ │ │ │ │ │ │ └── clearlooks2/ │ │ │ │ │ │ └── window.css │ │ │ │ │ └── template.htm │ │ │ │ ├── insertdatetime/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── layer/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── legacyoutput/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── lists/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── media/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── media.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── embed.js │ │ │ │ │ │ └── media.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ ├── media.htm │ │ │ │ │ └── moxieplayer.swf │ │ │ │ ├── nonbreaking/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── noneditable/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── pagebreak/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── paste/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── pastetext.js │ │ │ │ │ │ └── pasteword.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ ├── pastetext.htm │ │ │ │ │ └── pasteword.htm │ │ │ │ ├── preview/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── example.html │ │ │ │ │ ├── jscripts/ │ │ │ │ │ │ └── embed.js │ │ │ │ │ └── preview.html │ │ │ │ ├── print/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── save/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── searchreplace/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── searchreplace.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── searchreplace.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── searchreplace.htm │ │ │ │ ├── spellchecker/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── content.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── style/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── props.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── props.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── props.htm │ │ │ │ ├── tabfocus/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── table/ │ │ │ │ │ ├── cell.htm │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── cell.css │ │ │ │ │ │ ├── row.css │ │ │ │ │ │ └── table.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── cell.js │ │ │ │ │ │ ├── merge_cells.js │ │ │ │ │ │ ├── row.js │ │ │ │ │ │ └── table.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ ├── merge_cells.htm │ │ │ │ │ ├── row.htm │ │ │ │ │ └── table.htm │ │ │ │ ├── template/ │ │ │ │ │ ├── blank.htm │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── template.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── editor_plugin_src.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── template.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ └── template.htm │ │ │ │ ├── textbox/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── textbox.css │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── textbox.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ ├── be.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── hy.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── zh-tw.js │ │ │ │ │ │ └── zh.js │ │ │ │ │ └── textbox.htm │ │ │ │ ├── visualchars/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ ├── wordcount/ │ │ │ │ │ ├── editor_plugin.js │ │ │ │ │ └── editor_plugin_src.js │ │ │ │ └── xhtmlxtras/ │ │ │ │ ├── abbr.htm │ │ │ │ ├── acronym.htm │ │ │ │ ├── attributes.htm │ │ │ │ ├── cite.htm │ │ │ │ ├── css/ │ │ │ │ │ ├── attributes.css │ │ │ │ │ └── popup.css │ │ │ │ ├── del.htm │ │ │ │ ├── editor_plugin.js │ │ │ │ ├── editor_plugin_src.js │ │ │ │ ├── ins.htm │ │ │ │ ├── js/ │ │ │ │ │ ├── abbr.js │ │ │ │ │ ├── acronym.js │ │ │ │ │ ├── attributes.js │ │ │ │ │ ├── cite.js │ │ │ │ │ ├── del.js │ │ │ │ │ ├── element_common.js │ │ │ │ │ └── ins.js │ │ │ │ └── langs/ │ │ │ │ ├── ar_dlg.js │ │ │ │ ├── az_dlg.js │ │ │ │ ├── be_dlg.js │ │ │ │ ├── cs_dlg.js │ │ │ │ ├── da_dlg.js │ │ │ │ ├── de_dlg.js │ │ │ │ ├── el_dlg.js │ │ │ │ ├── en_dlg.js │ │ │ │ ├── es_dlg.js │ │ │ │ ├── fr_dlg.js │ │ │ │ ├── he_dlg.js │ │ │ │ ├── hr_dlg.js │ │ │ │ ├── hu_dlg.js │ │ │ │ ├── hy_dlg.js │ │ │ │ ├── it_dlg.js │ │ │ │ ├── ka_dlg.js │ │ │ │ ├── ko_dlg.js │ │ │ │ ├── nb_dlg.js │ │ │ │ ├── nl_dlg.js │ │ │ │ ├── pl_dlg.js │ │ │ │ ├── pt_dlg.js │ │ │ │ ├── ro_dlg.js │ │ │ │ ├── ru_dlg.js │ │ │ │ ├── sr_dlg.js │ │ │ │ ├── sv_dlg.js │ │ │ │ ├── tr_dlg.js │ │ │ │ ├── uk_dlg.js │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ └── zh_dlg.js │ │ │ ├── themes/ │ │ │ │ ├── advanced/ │ │ │ │ │ ├── about.htm │ │ │ │ │ ├── anchor.htm │ │ │ │ │ ├── charmap.htm │ │ │ │ │ ├── color_picker.htm │ │ │ │ │ ├── editor_template.js │ │ │ │ │ ├── editor_template_src.js │ │ │ │ │ ├── image.htm │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── about.js │ │ │ │ │ │ ├── anchor.js │ │ │ │ │ │ ├── charmap.js │ │ │ │ │ │ ├── color_picker.js │ │ │ │ │ │ ├── image.js │ │ │ │ │ │ ├── link.js │ │ │ │ │ │ └── source_editor.js │ │ │ │ │ ├── langs/ │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── ar_dlg.js │ │ │ │ │ │ ├── az.js │ │ │ │ │ │ ├── az_dlg.js │ │ │ │ │ │ ├── be.js │ │ │ │ │ │ ├── be_dlg.js │ │ │ │ │ │ ├── bn.js │ │ │ │ │ │ ├── bn_dlg.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cs_dlg.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── da_dlg.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── de_dlg.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── el_dlg.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── en_dlg.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── es_dlg.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── fr_dlg.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── he_dlg.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hr_dlg.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── hu_dlg.js │ │ │ │ │ │ ├── hy.js │ │ │ │ │ │ ├── hy_dlg.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── it_dlg.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── ka_dlg.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── ko_dlg.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nb_dlg.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── nl_dlg.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pl_dlg.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── pt_dlg.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ro_dlg.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── ru_dlg.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sr_dlg.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── sv_dlg.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── tr_dlg.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── uk_dlg.js │ │ │ │ │ │ ├── zh-tw.js │ │ │ │ │ │ ├── zh-tw_dlg.js │ │ │ │ │ │ ├── zh.js │ │ │ │ │ │ └── zh_dlg.js │ │ │ │ │ ├── link.htm │ │ │ │ │ ├── shortcuts.htm │ │ │ │ │ ├── skins/ │ │ │ │ │ │ ├── default/ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ │ └── ui.css │ │ │ │ │ │ ├── highcontrast/ │ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ │ └── ui.css │ │ │ │ │ │ └── o2k7/ │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ ├── ui.css │ │ │ │ │ │ ├── ui_black.css │ │ │ │ │ │ └── ui_silver.css │ │ │ │ │ └── source_editor.htm │ │ │ │ └── simple/ │ │ │ │ ├── editor_template.js │ │ │ │ ├── editor_template_src.js │ │ │ │ ├── langs/ │ │ │ │ │ ├── az.js │ │ │ │ │ ├── be.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── hy.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── zh-tw.js │ │ │ │ │ └── zh.js │ │ │ │ └── skins/ │ │ │ │ ├── default/ │ │ │ │ │ ├── content.css │ │ │ │ │ └── ui.css │ │ │ │ └── o2k7/ │ │ │ │ ├── content.css │ │ │ │ └── ui.css │ │ │ ├── tiny_mce.js │ │ │ ├── tiny_mce_popup.js │ │ │ ├── tiny_mce_src.js │ │ │ └── utils/ │ │ │ ├── editable_selects.js │ │ │ ├── form_utils.js │ │ │ ├── mctabs.js │ │ │ └── validate.js │ │ ├── underscore.js │ │ └── views/ │ │ └── PaginatorView.js │ ├── library/ │ │ ├── Newscoop/ │ │ │ ├── Acl/ │ │ │ │ ├── Assertions/ │ │ │ │ │ └── SaasAssertion.php │ │ │ │ └── Storage.php │ │ │ ├── Annotations/ │ │ │ │ └── Acl.php │ │ │ ├── Article/ │ │ │ │ ├── LinkService.php │ │ │ │ └── SearchService.php │ │ │ ├── ArticleDatetime.php │ │ │ ├── Auth/ │ │ │ │ └── Adapter.php │ │ │ ├── Cache/ │ │ │ │ └── CacheKey.php │ │ │ ├── Command.php │ │ │ ├── Comment/ │ │ │ │ └── SearchService.php │ │ │ ├── Composer/ │ │ │ │ └── ScriptHandler.php │ │ │ ├── Content/ │ │ │ │ ├── ContentTypeService.php │ │ │ │ ├── PublicationService.php │ │ │ │ └── SectionService.php │ │ │ ├── Controller/ │ │ │ │ ├── Action/ │ │ │ │ │ └── Helper/ │ │ │ │ │ └── Datatable/ │ │ │ │ │ ├── ADatatable.php │ │ │ │ │ ├── Adapter/ │ │ │ │ │ │ ├── AAdapter.php │ │ │ │ │ │ ├── Doctrine.php │ │ │ │ │ │ ├── Theme.php │ │ │ │ │ │ └── ThemeFiles.php │ │ │ │ │ └── Row.php │ │ │ │ ├── Helper/ │ │ │ │ │ └── FlashMessenger.php │ │ │ │ └── Plugin/ │ │ │ │ └── Js.php │ │ │ ├── Criteria/ │ │ │ │ ├── ArticleSearchCriteria.php │ │ │ │ ├── SlideshowCriteria.php │ │ │ │ └── SlideshowItemCriteria.php │ │ │ ├── Criteria.php │ │ │ ├── Datatable/ │ │ │ │ ├── ISource.php │ │ │ │ └── Source.php │ │ │ ├── DependencyInjection/ │ │ │ │ └── ContainerBuilder.php │ │ │ ├── Doctrine/ │ │ │ │ ├── AdoDbAdapter.php │ │ │ │ ├── AdoDbInteface.php │ │ │ │ ├── AdoDbStatement.php │ │ │ │ └── EventDispatcherProxy.php │ │ │ ├── EditorInterface.php │ │ │ ├── Entity/ │ │ │ │ ├── AbstractEntity.php │ │ │ │ ├── Acl/ │ │ │ │ │ ├── Permission.php │ │ │ │ │ ├── Role.php │ │ │ │ │ └── Rule.php │ │ │ │ ├── Aliases.php │ │ │ │ ├── Article.php │ │ │ │ ├── ArticleAuthor.php │ │ │ │ ├── ArticleDatetime.php │ │ │ │ ├── ArticleImage.php │ │ │ │ ├── ArticleIndex.php │ │ │ │ ├── ArticleTopic.php │ │ │ │ ├── ArticleType.php │ │ │ │ ├── ArticleTypeField.php │ │ │ │ ├── Attachment.php │ │ │ │ ├── AuditEvent.php │ │ │ │ ├── Author.php │ │ │ │ ├── AuthorType.php │ │ │ │ ├── AutoId.php │ │ │ │ ├── Comment/ │ │ │ │ │ ├── Acceptance.php │ │ │ │ │ ├── Commenter.php │ │ │ │ │ └── Preference/ │ │ │ │ │ ├── Article.php │ │ │ │ │ └── Publication.php │ │ │ │ ├── Comment.php │ │ │ │ ├── Country.php │ │ │ │ ├── CronJob.php │ │ │ │ ├── Event.php │ │ │ │ ├── Feedback.php │ │ │ │ ├── Hierarchable.php │ │ │ │ ├── Issue.php │ │ │ │ ├── KeywordIndex.php │ │ │ │ ├── Language.php │ │ │ │ ├── Log.php │ │ │ │ ├── Notification.php │ │ │ │ ├── Output/ │ │ │ │ │ ├── OutputSettingsIssue.php │ │ │ │ │ ├── OutputSettingsPublication.php │ │ │ │ │ ├── OutputSettingsSection.php │ │ │ │ │ └── OutputSettingsTheme.php │ │ │ │ ├── Output.php │ │ │ │ ├── OutputSettings.php │ │ │ │ ├── Picture.php │ │ │ │ ├── Playlist.php │ │ │ │ ├── PlaylistArticle.php │ │ │ │ ├── Plugin.php │ │ │ │ ├── Publication.php │ │ │ │ ├── Rating.php │ │ │ │ ├── RelatedArticle.php │ │ │ │ ├── RelatedArticles.php │ │ │ │ ├── Repository/ │ │ │ │ │ ├── Acl/ │ │ │ │ │ │ └── RuleRepository.php │ │ │ │ │ ├── ArticleAuthorRepository.php │ │ │ │ │ ├── ArticleDatetimeRepository.php │ │ │ │ │ ├── ArticleRepository.php │ │ │ │ │ ├── ArticleTopicRepository.php │ │ │ │ │ ├── ArticleTypeFieldRepository.php │ │ │ │ │ ├── ArticleTypeRepository.php │ │ │ │ │ ├── AttachmentRepository.php │ │ │ │ │ ├── AuditRepository.php │ │ │ │ │ ├── AuthorRepository.php │ │ │ │ │ ├── AuthorTypeRepository.php │ │ │ │ │ ├── AutoIdRepository.php │ │ │ │ │ ├── Comment/ │ │ │ │ │ │ ├── AcceptanceRepository.php │ │ │ │ │ │ └── CommenterRepository.php │ │ │ │ │ ├── CommentRepository.php │ │ │ │ │ ├── DatatableRepository.php │ │ │ │ │ ├── FeedbackRepository.php │ │ │ │ │ ├── ImageRepository.php │ │ │ │ │ ├── IssueRepository.php │ │ │ │ │ ├── LanguageRepository.php │ │ │ │ │ ├── NotificationRepository.php │ │ │ │ │ ├── PlaylistArticleRepository.php │ │ │ │ │ ├── PlaylistRepository.php │ │ │ │ │ ├── PluginRepository.php │ │ │ │ │ ├── PublicationRepository.php │ │ │ │ │ ├── RatingRepository.php │ │ │ │ │ ├── RelatedArticleRepository.php │ │ │ │ │ ├── RelatedArticlesRepository.php │ │ │ │ │ ├── SectionRepository.php │ │ │ │ │ ├── Snippet/ │ │ │ │ │ │ └── SnippetTemplateRepository.php │ │ │ │ │ ├── SnippetRepository.php │ │ │ │ │ ├── SubscriptionArticleRepository.php │ │ │ │ │ ├── SubscriptionIssueRepository.php │ │ │ │ │ ├── SubscriptionSectionRepository.php │ │ │ │ │ ├── TemplateRepository.php │ │ │ │ │ ├── ThemeRepository.php │ │ │ │ │ ├── User/ │ │ │ │ │ │ ├── GroupRepository.php │ │ │ │ │ │ └── StaffRepository.php │ │ │ │ │ ├── UserPointsRepository.php │ │ │ │ │ ├── UserRepository.php │ │ │ │ │ └── UserTopicRepository.php │ │ │ │ ├── Request.php │ │ │ │ ├── Resource.php │ │ │ │ ├── Section.php │ │ │ │ ├── Session.php │ │ │ │ ├── Snippet/ │ │ │ │ │ ├── SnippetField.php │ │ │ │ │ ├── SnippetTemplate/ │ │ │ │ │ │ └── SnippetTemplateField.php │ │ │ │ │ └── SnippetTemplate.php │ │ │ │ ├── Snippet.php │ │ │ │ ├── Template.php │ │ │ │ ├── Theme/ │ │ │ │ │ └── Loader/ │ │ │ │ │ ├── Loader.php │ │ │ │ │ └── LocalLoader.php │ │ │ │ ├── Theme.php │ │ │ │ ├── Translation.php │ │ │ │ ├── User/ │ │ │ │ │ ├── Group.php │ │ │ │ │ ├── Ip.php │ │ │ │ │ └── Staff.php │ │ │ │ ├── User.php │ │ │ │ ├── UserAttribute.php │ │ │ │ ├── UserIdentity.php │ │ │ │ ├── UserPoints.php │ │ │ │ ├── UserToken.php │ │ │ │ ├── UserTopic.php │ │ │ │ └── Webcode.php │ │ │ ├── EventDispatcher/ │ │ │ │ └── Events/ │ │ │ │ ├── CollectObjectsDataEvent.php │ │ │ │ ├── GenericEvent.php │ │ │ │ ├── PluginHooksEvent.php │ │ │ │ └── PluginPermissionsEvent.php │ │ │ ├── Exception/ │ │ │ │ ├── AuthenticationException.php │ │ │ │ ├── InvalidParametersException.php │ │ │ │ ├── ResourceIsEmptyException.php │ │ │ │ ├── ResourceNotModifiedException.php │ │ │ │ └── ResourcesConflictException.php │ │ │ ├── File/ │ │ │ │ └── Manager/ │ │ │ │ ├── LocalManager.php │ │ │ │ └── Manager.php │ │ │ ├── Form/ │ │ │ │ ├── Decorator/ │ │ │ │ │ ├── Form.php │ │ │ │ │ ├── HtmlTag.php │ │ │ │ │ └── Label.php │ │ │ │ ├── Element/ │ │ │ │ │ └── OldHash.php │ │ │ │ └── FormServiceInterface.php │ │ │ ├── Form.php │ │ │ ├── Gimme/ │ │ │ │ ├── Json.php │ │ │ │ ├── Pagination.php │ │ │ │ ├── PaginatorService.php │ │ │ │ ├── PartialResponse.php │ │ │ │ └── PropertyMatcher.php │ │ │ ├── Image/ │ │ │ │ ├── ArticleImage.php │ │ │ │ ├── ArticleImageCaption.php │ │ │ │ ├── ArticleRendition.php │ │ │ │ ├── ArticleRenditionCollection.php │ │ │ │ ├── DefaultArticleRendition.php │ │ │ │ ├── ImageInterface.php │ │ │ │ ├── ImageSearchService.php │ │ │ │ ├── ImageService.php │ │ │ │ ├── LocalImage.php │ │ │ │ ├── Rendition.php │ │ │ │ ├── RenditionService.php │ │ │ │ ├── RenditionViewHelper.php │ │ │ │ ├── Thumbnail.php │ │ │ │ ├── ThumbnailViewHelper.php │ │ │ │ └── UpdateStorageService.php │ │ │ ├── Installer/ │ │ │ │ └── Services/ │ │ │ │ ├── BootstrapService.php │ │ │ │ ├── DatabaseService.php │ │ │ │ ├── DemositeService.php │ │ │ │ ├── FinishService.php │ │ │ │ └── UpgradeService.php │ │ │ ├── IssueServiceInterface.php │ │ │ ├── ListResult.php │ │ │ ├── Log/ │ │ │ │ └── Writer.php │ │ │ ├── NewscoopException.php │ │ │ ├── Package/ │ │ │ │ ├── Article.php │ │ │ │ ├── ArticlePackage.php │ │ │ │ ├── Item.php │ │ │ │ ├── ItemRepository.php │ │ │ │ ├── Package.php │ │ │ │ ├── PackageRepository.php │ │ │ │ ├── PackageSearchService.php │ │ │ │ ├── PackageService.php │ │ │ │ └── RemoteVideo.php │ │ │ ├── PaginatedCollection.php │ │ │ ├── Persistence/ │ │ │ │ └── ObjectRepository.php │ │ │ ├── Query/ │ │ │ │ ├── MysqlDateFormat.php │ │ │ │ ├── MysqlDayOfMonth.php │ │ │ │ ├── MysqlDayOfWeek.php │ │ │ │ ├── MysqlDayOfYear.php │ │ │ │ ├── MysqlField.php │ │ │ │ ├── MysqlRandom.php │ │ │ │ └── SqliteRandom.php │ │ │ ├── Random.php │ │ │ ├── Router/ │ │ │ │ └── RouterFactory.php │ │ │ ├── SchedulerServiceInterface.php │ │ │ ├── Search/ │ │ │ │ ├── DefaultIndexClient.php │ │ │ │ ├── DocumentInterface.php │ │ │ │ ├── IndexClientInterface.php │ │ │ │ ├── IndexException.php │ │ │ │ ├── Indexer.php │ │ │ │ ├── RepositoryInterface.php │ │ │ │ └── ServiceInterface.php │ │ │ ├── Service/ │ │ │ │ ├── Error/ │ │ │ │ │ └── ThemeErrors.php │ │ │ │ ├── Exception/ │ │ │ │ │ ├── DuplicateNameException.php │ │ │ │ │ └── RemoveThemeException.php │ │ │ │ ├── IArticleTypeService.php │ │ │ │ ├── IAuditService.php │ │ │ │ ├── IEntityBaseService.php │ │ │ │ ├── IEntityService.php │ │ │ │ ├── IErrorHandler.php │ │ │ │ ├── IIssueService.php │ │ │ │ ├── ILanguageService.php │ │ │ │ ├── IOutputService.php │ │ │ │ ├── IOutputSettingIssueService.php │ │ │ │ ├── IOutputSettingSectionService.php │ │ │ │ ├── IPublicationService.php │ │ │ │ ├── ISectionService.php │ │ │ │ ├── ISyncResourceService.php │ │ │ │ ├── ITemplateSearchService.php │ │ │ │ ├── IThemeManagementService.php │ │ │ │ ├── IThemeService.php │ │ │ │ ├── Implementation/ │ │ │ │ │ ├── AEntityBaseServiceDoctrine.php │ │ │ │ │ ├── AEntityServiceDoctrine.php │ │ │ │ │ ├── ArticleTypeServiceDoctrine.php │ │ │ │ │ ├── ErrorHandlerOnLog.php │ │ │ │ │ ├── Exception/ │ │ │ │ │ │ ├── FailedException.php │ │ │ │ │ │ └── XMLMissingAttribueException.php │ │ │ │ │ ├── IssueServiceDoctrine.php │ │ │ │ │ ├── LanguageServiceDoctrine.php │ │ │ │ │ ├── OutputServiceDoctrine.php │ │ │ │ │ ├── OutputSettingIssueServiceDoctrine.php │ │ │ │ │ ├── OutputSettingSectionServiceDoctrine.php │ │ │ │ │ ├── PublicationServiceDoctrine.php │ │ │ │ │ ├── SectionServiceDoctrine.php │ │ │ │ │ ├── SyncResourceServiceDoctrine.php │ │ │ │ │ ├── TemplateSearchServiceDoctrine.php │ │ │ │ │ ├── ThemeManagementServiceLocal.php │ │ │ │ │ └── ThemeServiceLocalFileSystem.php │ │ │ │ ├── Model/ │ │ │ │ │ ├── Search/ │ │ │ │ │ │ ├── Column.php │ │ │ │ │ │ ├── ColumnOrder.php │ │ │ │ │ │ ├── ColumnOrderLike.php │ │ │ │ │ │ └── Search.php │ │ │ │ │ ├── SearchIssue.php │ │ │ │ │ ├── SearchLanguage.php │ │ │ │ │ ├── SearchOutput.php │ │ │ │ │ ├── SearchPublication.php │ │ │ │ │ ├── SearchResource.php │ │ │ │ │ ├── SearchSection.php │ │ │ │ │ └── SearchTheme.php │ │ │ │ ├── Resource/ │ │ │ │ │ ├── ResourceId.php │ │ │ │ │ └── ResourceRepository.php │ │ │ │ ├── Template.php │ │ │ │ └── configs/ │ │ │ │ └── ResourceRepository.properties │ │ │ ├── Services/ │ │ │ │ ├── ArticleService.php │ │ │ │ ├── AttachmentService.php │ │ │ │ ├── AuditMaintenanceService.php │ │ │ │ ├── AuditService.php │ │ │ │ ├── Auth/ │ │ │ │ │ ├── DoctrineAuthService.php │ │ │ │ │ └── SocialAuthService.php │ │ │ │ ├── AuthorService.php │ │ │ │ ├── BlogService.php │ │ │ │ ├── CacheService.php │ │ │ │ ├── CommentNotificationService.php │ │ │ │ ├── CommentService.php │ │ │ │ ├── EditorService.php │ │ │ │ ├── EmailService.php │ │ │ │ ├── FilesystemService.php │ │ │ │ ├── GarbageCollectionService.php │ │ │ │ ├── InputManipulator.php │ │ │ │ ├── IssueService.php │ │ │ │ ├── ListPaginatorService.php │ │ │ │ ├── ListUserService.php │ │ │ │ ├── NotificationService.php │ │ │ │ ├── PlaceholdersService.php │ │ │ │ ├── PlaylistsService.php │ │ │ │ ├── Plugins/ │ │ │ │ │ ├── ManagerService.php │ │ │ │ │ └── PluginsService.php │ │ │ │ ├── PublicationService.php │ │ │ │ ├── RelatedArticlesService.php │ │ │ │ ├── SchedulerService.php │ │ │ │ ├── StatService.php │ │ │ │ ├── SubscriptionService.php │ │ │ │ ├── TemplatesService.php │ │ │ │ ├── ThemesService.php │ │ │ │ ├── UserAttributeService.php │ │ │ │ ├── UserPointsService.php │ │ │ │ ├── UserSearchService.php │ │ │ │ ├── UserService.php │ │ │ │ ├── UserTokenService.php │ │ │ │ ├── UserTopicService.php │ │ │ │ └── UserTypeService.php │ │ │ ├── SmartyView.php │ │ │ ├── Storage/ │ │ │ │ ├── Item.php │ │ │ │ └── StorageService.php │ │ │ ├── Storage.php │ │ │ ├── Subscription/ │ │ │ │ ├── Article.php │ │ │ │ ├── IpFacade.php │ │ │ │ ├── Issue.php │ │ │ │ ├── Section.php │ │ │ │ ├── SectionFacade.php │ │ │ │ ├── Subscription.php │ │ │ │ ├── SubscriptionData.php │ │ │ │ ├── SubscriptionFacade.php │ │ │ │ └── SubscriptionRepository.php │ │ │ ├── TemplateList/ │ │ │ │ ├── BaseList.php │ │ │ │ ├── Meta/ │ │ │ │ │ ├── MetaBase.php │ │ │ │ │ ├── SlideshowItemMeta.php │ │ │ │ │ └── SlideshowsMeta.php │ │ │ │ ├── PaginatedBaseList.php │ │ │ │ ├── SlideshowItemsList.php │ │ │ │ ├── SlideshowsList.php │ │ │ │ └── UsersList.php │ │ │ ├── ThemesServiceInterface.php │ │ │ ├── Tools/ │ │ │ │ └── Console/ │ │ │ │ ├── Command/ │ │ │ │ │ ├── AbstractIndexCommand.php │ │ │ │ │ ├── AssignThemeCommand.php │ │ │ │ │ ├── AutopublishCommand.php │ │ │ │ │ ├── ClearIndexCommand.php │ │ │ │ │ ├── ClearOldStatisticsCommand.php │ │ │ │ │ ├── CreateOAuthClientCommand.php │ │ │ │ │ ├── CreateUserCommand.php │ │ │ │ │ ├── DispatchEventForPluginCommand.php │ │ │ │ │ ├── EventsNotifierCommand.php │ │ │ │ │ ├── GenerateORMSchemaCommand.php │ │ │ │ │ ├── GenerateWebcodeCommand.php │ │ │ │ │ ├── IndexerCommand.php │ │ │ │ │ ├── InstallNewscoopCommand.php │ │ │ │ │ ├── InstallPluginCommand.php │ │ │ │ │ ├── LogMaintenanceCommand.php │ │ │ │ │ ├── ReloadRenditionsCommand.php │ │ │ │ │ ├── RemovePluginCommand.php │ │ │ │ │ ├── SchedulerManagerCommand.php │ │ │ │ │ ├── SendStatsCommand.php │ │ │ │ │ ├── SubscriptionsNotifierCommand.php │ │ │ │ │ ├── UpdateAutoloadCommand.php │ │ │ │ │ ├── UpdateImageStorageCommand.php │ │ │ │ │ ├── UpdateIndexCommand.php │ │ │ │ │ ├── UpdatePluginCommand.php │ │ │ │ │ ├── UpgradePluginsCommand.php │ │ │ │ │ └── UserGarbageCollectionCommand.php │ │ │ │ └── Helper/ │ │ │ │ └── ServiceContainerHelper.php │ │ │ ├── Topic/ │ │ │ │ └── SaveUserTopicsCommand.php │ │ │ ├── User/ │ │ │ │ ├── SearchService.php │ │ │ │ ├── UserCriteria.php │ │ │ │ └── UserManager.php │ │ │ ├── Utils/ │ │ │ │ ├── Exception.php │ │ │ │ ├── PermissionToAcl.php │ │ │ │ └── Validation.php │ │ │ ├── ValueObject.php │ │ │ ├── Version.php │ │ │ ├── View/ │ │ │ │ ├── ArticleView.php │ │ │ │ ├── AuthorView.php │ │ │ │ ├── PackageView.php │ │ │ │ ├── TopicView.php │ │ │ │ ├── UserView.php │ │ │ │ ├── View.php │ │ │ │ ├── ViewCollection.php │ │ │ │ └── ViewFactory.php │ │ │ └── WebcodeFacade.php │ │ ├── Proxy/ │ │ │ └── .gitignore │ │ └── Resource/ │ │ ├── Acl/ │ │ │ ├── Annotation/ │ │ │ │ └── Acl.php │ │ │ ├── RuleInterface.php │ │ │ └── StorageInterface.php │ │ └── Acl.php │ ├── log/ │ │ ├── .gitignore │ │ └── .htaccess │ ├── plugins/ │ │ └── .gitignore │ ├── public/ │ │ ├── .htaccess │ │ ├── bundles/ │ │ │ └── .gitignore │ │ ├── css/ │ │ │ ├── jquery.qtip.css │ │ │ └── omnibox.css │ │ ├── files/ │ │ │ └── .gitignore │ │ ├── index.php │ │ ├── js/ │ │ │ ├── fos_js_routes.js │ │ │ ├── jquery.wobscalendar.js │ │ │ └── user_profile.js │ │ ├── pdf/ │ │ │ └── .gitignore │ │ └── videos/ │ │ ├── example.flv │ │ └── player.swf │ ├── robots.txt │ ├── scripts/ │ │ ├── doctrine.php │ │ ├── file_processing.php │ │ ├── fixer.php │ │ └── newscoop.php │ ├── src/ │ │ └── Newscoop/ │ │ ├── ArticlesBundle/ │ │ │ ├── DependencyInjection/ │ │ │ │ ├── Configuration.php │ │ │ │ └── NewscoopArticlesExtension.php │ │ │ ├── Entity/ │ │ │ │ ├── EditorialComment.php │ │ │ │ └── Repository/ │ │ │ │ └── EditorialCommentRepository.php │ │ │ ├── EventListener/ │ │ │ │ └── HookListener.php │ │ │ ├── Form/ │ │ │ │ └── Type/ │ │ │ │ └── EditorialCommentType.php │ │ │ ├── NewscoopArticlesBundle.php │ │ │ ├── Resources/ │ │ │ │ ├── config/ │ │ │ │ │ └── services.yml │ │ │ │ ├── public/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ ├── comments-ctrl.js │ │ │ │ │ │ ├── loading-bar.css │ │ │ │ │ │ ├── loading-bar.js │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── comments.js │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── editorial-comments.css │ │ │ │ │ └── views/ │ │ │ │ │ └── main.html │ │ │ │ └── views/ │ │ │ │ └── Hook/ │ │ │ │ └── editorialComments.html.twig │ │ │ └── Services/ │ │ │ └── EditorialCommentsService.php │ │ ├── CommunityTickerBundle/ │ │ │ ├── Command/ │ │ │ │ └── MigrateTablesCommand.php │ │ │ ├── DependencyInjection/ │ │ │ │ ├── Configuration.php │ │ │ │ └── NewscoopCommunityTickerExtension.php │ │ │ ├── Entity/ │ │ │ │ ├── CommunityTickerEvent.php │ │ │ │ └── Repository/ │ │ │ │ └── CommunityTickerEventRepository.php │ │ │ ├── EventListener/ │ │ │ │ ├── LifecycleSubscriber.php │ │ │ │ └── ListObjectsListener.php │ │ │ ├── Meta/ │ │ │ │ └── MetaCommunityTicker.php │ │ │ ├── NewscoopCommunityTickerBundle.php │ │ │ ├── Resources/ │ │ │ │ ├── config/ │ │ │ │ │ └── services.yml │ │ │ │ └── smartyPlugins/ │ │ │ │ └── block.list_community_feeds.php │ │ │ ├── Services/ │ │ │ │ └── CommunityFeedService.php │ │ │ └── TemplateList/ │ │ │ ├── CommunityFeedsList.php │ │ │ └── ListCriteria.php │ │ ├── GimmeBundle/ │ │ │ ├── Controller/ │ │ │ │ ├── ArticleTypesController.php │ │ │ │ ├── ArticlesController.php │ │ │ │ ├── ArticlesListController.php │ │ │ │ ├── AttachmentsController.php │ │ │ │ ├── AuthorizeController.php │ │ │ │ ├── AuthorsController.php │ │ │ │ ├── CommentsController.php │ │ │ │ ├── ConfigureApiController.php │ │ │ │ ├── EditorialCommentsApiController.php │ │ │ │ ├── ExceptionController.php │ │ │ │ ├── ImagesController.php │ │ │ │ ├── IssuesController.php │ │ │ │ ├── OauthController.php │ │ │ │ ├── PublicationsController.php │ │ │ │ ├── SectionsController.php │ │ │ │ ├── SlideshowsController.php │ │ │ │ ├── SnippetTemplatesController.php │ │ │ │ ├── SnippetsController.php │ │ │ │ ├── TopicsController.php │ │ │ │ ├── UserTopicsController.php │ │ │ │ └── UsersController.php │ │ │ ├── DependencyInjection/ │ │ │ │ ├── Configuration.php │ │ │ │ └── NewscoopGimmeExtension.php │ │ │ ├── Entity/ │ │ │ │ ├── AccessToken.php │ │ │ │ ├── AuthCode.php │ │ │ │ ├── Client.php │ │ │ │ ├── PublicApiResource.php │ │ │ │ └── RefreshToken.php │ │ │ ├── EventListener/ │ │ │ │ ├── AllowOriginListener.php │ │ │ │ ├── ExceptionListener.php │ │ │ │ ├── FormatJsonResponseListener.php │ │ │ │ ├── LinkRequestListener.php │ │ │ │ ├── OAuthEventListener.php │ │ │ │ ├── PaginationExtraDataSubscriber.php │ │ │ │ ├── PaginationListener.php │ │ │ │ ├── PublicResourcesListener.php │ │ │ │ ├── QuerySubscriber.php │ │ │ │ ├── Selectable/ │ │ │ │ │ └── Doctrine/ │ │ │ │ │ └── ORM/ │ │ │ │ │ └── Query/ │ │ │ │ │ └── SelectWalker.php │ │ │ │ ├── SerializerSubscriber.php │ │ │ │ └── Sortable/ │ │ │ │ └── Doctrine/ │ │ │ │ └── ORM/ │ │ │ │ └── Query/ │ │ │ │ └── OrderByWalker.php │ │ │ ├── Form/ │ │ │ │ ├── DataTransformer/ │ │ │ │ │ └── StringToArrayTransformer.php │ │ │ │ ├── Handler/ │ │ │ │ │ └── AuthorizeFormHandler.php │ │ │ │ ├── Model/ │ │ │ │ │ └── Authorize.php │ │ │ │ └── Type/ │ │ │ │ ├── ArticleFieldsType.php │ │ │ │ ├── ArticleType.php │ │ │ │ ├── AttachmentType.php │ │ │ │ ├── AuthorizeFormType.php │ │ │ │ ├── ClientType.php │ │ │ │ ├── CommentType.php │ │ │ │ ├── ImageType.php │ │ │ │ ├── PlaylistType.php │ │ │ │ ├── PublicResourcesType.php │ │ │ │ ├── SnippetFieldType.php │ │ │ │ ├── SnippetTemplateFieldType.php │ │ │ │ ├── SnippetTemplateType.php │ │ │ │ └── SnippetType.php │ │ │ ├── NewscoopGimmeBundle.php │ │ │ ├── Node/ │ │ │ │ ├── Node.php │ │ │ │ └── NodeTree.php │ │ │ ├── Resources/ │ │ │ │ ├── config/ │ │ │ │ │ ├── routing.yml │ │ │ │ │ ├── serializer/ │ │ │ │ │ │ └── newscoop/ │ │ │ │ │ │ ├── Article.yml │ │ │ │ │ │ ├── ArticleAuthor.yml │ │ │ │ │ │ ├── ArticleType.yml │ │ │ │ │ │ ├── ArticleTypeField.yml │ │ │ │ │ │ ├── Attachment.yml │ │ │ │ │ │ ├── Author.yml │ │ │ │ │ │ ├── AuthorType.yml │ │ │ │ │ │ ├── Comment.yml │ │ │ │ │ │ ├── Commenter.yml │ │ │ │ │ │ ├── EditorialComment.yml │ │ │ │ │ │ ├── Issue.yml │ │ │ │ │ │ ├── Item.yml │ │ │ │ │ │ ├── Language.yml │ │ │ │ │ │ ├── LocalImage.yml │ │ │ │ │ │ ├── Package.yml │ │ │ │ │ │ ├── Playlist.yml │ │ │ │ │ │ ├── Publication.yml │ │ │ │ │ │ ├── Section.yml │ │ │ │ │ │ ├── Snippet.yml │ │ │ │ │ │ ├── SnippetField.yml │ │ │ │ │ │ ├── SnippetTemplate.yml │ │ │ │ │ │ ├── SnippetTemplateField.yml │ │ │ │ │ │ ├── Template.yml │ │ │ │ │ │ ├── Topic.yml │ │ │ │ │ │ ├── TopicTranslation.yml │ │ │ │ │ │ ├── User.yml │ │ │ │ │ │ └── UserTopic.yml │ │ │ │ │ └── services.yml │ │ │ │ ├── public/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── jquery.dynatable.css │ │ │ │ │ └── js/ │ │ │ │ │ └── jquery.dynatable.js │ │ │ │ └── views/ │ │ │ │ ├── ConfigureApi/ │ │ │ │ │ └── configure.html.twig │ │ │ │ └── Oauth/ │ │ │ │ └── login.html.twig │ │ │ └── Serializer/ │ │ │ ├── Article/ │ │ │ │ ├── AuthorHandler.php │ │ │ │ ├── CommentsCountHandler.php │ │ │ │ ├── CommentsLinkHandler.php │ │ │ │ ├── FieldsHandler.php │ │ │ │ ├── RenditionsHandler.php │ │ │ │ ├── TranslationsHandler.php │ │ │ │ └── UrlHandler.php │ │ │ ├── Image/ │ │ │ │ ├── ImageUriHandler.php │ │ │ │ └── ThumbnailUriHandler.php │ │ │ ├── Package/ │ │ │ │ └── ItemsLinkHandler.php │ │ │ └── Topic/ │ │ │ └── TopicPathHandler.php │ │ ├── NewscoopBundle/ │ │ │ ├── Controller/ │ │ │ │ ├── AttachmentsController.php │ │ │ │ ├── AuthorsController.php │ │ │ │ ├── BackendArticleImagesController.php │ │ │ │ ├── BackendJournalistDashboardController.php │ │ │ │ ├── BackendPublicationsController.php │ │ │ │ ├── CommentsController.php │ │ │ │ ├── EmbedlyController.php │ │ │ │ ├── FeedController.php │ │ │ │ ├── ImagesController.php │ │ │ │ ├── LanguageController.php │ │ │ │ ├── PasswordRecoveryController.php │ │ │ │ ├── PlaylistsController.php │ │ │ │ ├── PluginsController.php │ │ │ │ ├── SecurityController.php │ │ │ │ ├── SnippetControllerInterface.php │ │ │ │ ├── SystemPrefController.php │ │ │ │ ├── TopicsController.php │ │ │ │ ├── UsersController.php │ │ │ │ └── WebcodeRedirectController.php │ │ │ ├── DependencyInjection/ │ │ │ │ ├── Configuration.php │ │ │ │ └── NewscoopNewscoopExtension.php │ │ │ ├── Entity/ │ │ │ │ ├── CityLocations.php │ │ │ │ ├── CityNames.php │ │ │ │ ├── Repository/ │ │ │ │ │ └── TopicRepository.php │ │ │ │ ├── SystemPreferences.php │ │ │ │ ├── Topic.php │ │ │ │ └── TopicTranslation.php │ │ │ ├── Event/ │ │ │ │ └── ConfigureMenuEvent.php │ │ │ ├── EventListener/ │ │ │ │ ├── AccessDeniedExceptionListener.php │ │ │ │ ├── ArticleListener.php │ │ │ │ ├── CaptchaUsernamePasswordFormAuthenticationListener.php │ │ │ │ ├── IssueListener.php │ │ │ │ ├── ListObjectsListener.php │ │ │ │ ├── LocaleListener.php │ │ │ │ ├── NoCacheListener.php │ │ │ │ ├── OldPluginsTranslationListener.php │ │ │ │ ├── PublicationListener.php │ │ │ │ ├── RouteListener.php │ │ │ │ └── UserIpListener.php │ │ │ ├── Form/ │ │ │ │ └── Type/ │ │ │ │ ├── ArticleImageType.php │ │ │ │ ├── CommentSearchType.php │ │ │ │ ├── CommentsFilterType.php │ │ │ │ ├── PasswordCheckType.php │ │ │ │ ├── PasswordRecoveryType.php │ │ │ │ ├── PreferencesType.php │ │ │ │ ├── PrivatePluginUploadType.php │ │ │ │ ├── PublicationType.php │ │ │ │ ├── RecaptchaType.php │ │ │ │ ├── RemovePublicationType.php │ │ │ │ ├── TopicTranslationType.php │ │ │ │ └── TopicType.php │ │ │ ├── Menu/ │ │ │ │ └── Builder.php │ │ │ ├── NewscoopNewscoopBundle.php │ │ │ ├── ORM/ │ │ │ │ ├── Point.php │ │ │ │ ├── PointType.php │ │ │ │ └── UTCDateTimeType.php │ │ │ ├── Resources/ │ │ │ │ ├── config/ │ │ │ │ │ ├── routing.yml │ │ │ │ │ └── services.yml │ │ │ │ ├── doc/ │ │ │ │ │ └── index.rst │ │ │ │ ├── public/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── DT_bootstrap.css │ │ │ │ │ │ ├── bootstrap-custom-comments.css │ │ │ │ │ │ ├── bootstrap-custom.css │ │ │ │ │ │ ├── bootstrap.css │ │ │ │ │ │ ├── comments.css │ │ │ │ │ │ ├── jquery.dynatable.css │ │ │ │ │ │ ├── new-design.css │ │ │ │ │ │ ├── playlists.css │ │ │ │ │ │ └── plugin.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── DT_bootstrap.js │ │ │ │ │ │ ├── Sortable.js │ │ │ │ │ │ ├── angular-moment.js │ │ │ │ │ │ ├── angular-ui-tree.js │ │ │ │ │ │ ├── checklist-model.js │ │ │ │ │ │ ├── jquery.dynatable.js │ │ │ │ │ │ ├── moment-with-locales.js │ │ │ │ │ │ ├── ng-sortable.js │ │ │ │ │ │ ├── playlists/ │ │ │ │ │ │ │ ├── app.js │ │ │ │ │ │ │ ├── controllers/ │ │ │ │ │ │ │ │ ├── articles-filters.js │ │ │ │ │ │ │ │ ├── featured-articles.js │ │ │ │ │ │ │ │ └── playlists.js │ │ │ │ │ │ │ ├── directives/ │ │ │ │ │ │ │ │ ├── loading-container.js │ │ │ │ │ │ │ │ └── sf-iframe.js │ │ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ │ │ └── lists-search.js │ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ │ ├── auth-interceptor.js │ │ │ │ │ │ │ ├── filters-service.js │ │ │ │ │ │ │ ├── modal-factory.js │ │ │ │ │ │ │ ├── playlists.js │ │ │ │ │ │ │ └── user-auth.js │ │ │ │ │ │ ├── popover.js │ │ │ │ │ │ ├── sanitize.js │ │ │ │ │ │ ├── tree.js │ │ │ │ │ │ └── ui-bootstrap-modal.js │ │ │ │ │ └── views/ │ │ │ │ │ ├── modal-confirm.html │ │ │ │ │ ├── modal-danger.html │ │ │ │ │ └── modal-login.html │ │ │ │ ├── translations/ │ │ │ │ │ ├── api.ar.yml │ │ │ │ │ ├── api.az.yml │ │ │ │ │ ├── api.be.yml │ │ │ │ │ ├── api.bn.yml │ │ │ │ │ ├── api.cs.yml │ │ │ │ │ ├── api.da.yml │ │ │ │ │ ├── api.de.yml │ │ │ │ │ ├── api.de_AT.yml │ │ │ │ │ ├── api.el.yml │ │ │ │ │ ├── api.en.yml │ │ │ │ │ ├── api.en_GB.yml │ │ │ │ │ ├── api.es.yml │ │ │ │ │ ├── api.es_AR.yml │ │ │ │ │ ├── api.fa.yml │ │ │ │ │ ├── api.fa_AF.yml │ │ │ │ │ ├── api.fr.yml │ │ │ │ │ ├── api.he.yml │ │ │ │ │ ├── api.hr.yml │ │ │ │ │ ├── api.hu.yml │ │ │ │ │ ├── api.hy.yml │ │ │ │ │ ├── api.hy_AM.yml │ │ │ │ │ ├── api.id.yml │ │ │ │ │ ├── api.it.yml │ │ │ │ │ ├── api.ka.yml │ │ │ │ │ ├── api.ko.yml │ │ │ │ │ ├── api.ku.yml │ │ │ │ │ ├── api.lv.yml │ │ │ │ │ ├── api.mr.yml │ │ │ │ │ ├── api.nb_NO.yml │ │ │ │ │ ├── api.nl.yml │ │ │ │ │ ├── api.pa.yml │ │ │ │ │ ├── api.pl.yml │ │ │ │ │ ├── api.ps.yml │ │ │ │ │ ├── api.pt.yml │ │ │ │ │ ├── api.pt_BR.yml │ │ │ │ │ ├── api.ro.yml │ │ │ │ │ ├── api.ru.yml │ │ │ │ │ ├── api.sh.yml │ │ │ │ │ ├── api.sq.yml │ │ │ │ │ ├── api.sr.yml │ │ │ │ │ ├── api.sv.yml │ │ │ │ │ ├── api.tr.yml │ │ │ │ │ ├── api.uk.yml │ │ │ │ │ ├── api.vi.yml │ │ │ │ │ ├── api.zh.yml │ │ │ │ │ ├── api.zh_TW.yml │ │ │ │ │ ├── article_comments.ar.yml │ │ │ │ │ ├── article_comments.az.yml │ │ │ │ │ ├── article_comments.be.yml │ │ │ │ │ ├── article_comments.bn.yml │ │ │ │ │ ├── article_comments.cs.yml │ │ │ │ │ ├── article_comments.da.yml │ │ │ │ │ ├── article_comments.de.yml │ │ │ │ │ ├── article_comments.de_AT.yml │ │ │ │ │ ├── article_comments.el.yml │ │ │ │ │ ├── article_comments.en.yml │ │ │ │ │ ├── article_comments.en_GB.yml │ │ │ │ │ ├── article_comments.es.yml │ │ │ │ │ ├── article_comments.es_AR.yml │ │ │ │ │ ├── article_comments.fa.yml │ │ │ │ │ ├── article_comments.fa_AF.yml │ │ │ │ │ ├── article_comments.fr.yml │ │ │ │ │ ├── article_comments.he.yml │ │ │ │ │ ├── article_comments.hr.yml │ │ │ │ │ ├── article_comments.hu.yml │ │ │ │ │ ├── article_comments.hy.yml │ │ │ │ │ ├── article_comments.hy_AM.yml │ │ │ │ │ ├── article_comments.id.yml │ │ │ │ │ ├── article_comments.it.yml │ │ │ │ │ ├── article_comments.ka.yml │ │ │ │ │ ├── article_comments.ko.yml │ │ │ │ │ ├── article_comments.ku.yml │ │ │ │ │ ├── article_comments.lv.yml │ │ │ │ │ ├── article_comments.mr.yml │ │ │ │ │ ├── article_comments.nb_NO.yml │ │ │ │ │ ├── article_comments.nl.yml │ │ │ │ │ ├── article_comments.pa.yml │ │ │ │ │ ├── article_comments.pl.yml │ │ │ │ │ ├── article_comments.ps.yml │ │ │ │ │ ├── article_comments.pt.yml │ │ │ │ │ ├── article_comments.pt_BR.yml │ │ │ │ │ ├── article_comments.ro.yml │ │ │ │ │ ├── article_comments.ru.yml │ │ │ │ │ ├── article_comments.sh.yml │ │ │ │ │ ├── article_comments.sq.yml │ │ │ │ │ ├── article_comments.sr.yml │ │ │ │ │ ├── article_comments.sv.yml │ │ │ │ │ ├── article_comments.tr.yml │ │ │ │ │ ├── article_comments.uk.yml │ │ │ │ │ ├── article_comments.vi.yml │ │ │ │ │ ├── article_comments.zh.yml │ │ │ │ │ ├── article_comments.zh_TW.yml │ │ │ │ │ ├── article_files.ar.yml │ │ │ │ │ ├── article_files.az.yml │ │ │ │ │ ├── article_files.be.yml │ │ │ │ │ ├── article_files.bn.yml │ │ │ │ │ ├── article_files.cs.yml │ │ │ │ │ ├── article_files.da.yml │ │ │ │ │ ├── article_files.de.yml │ │ │ │ │ ├── article_files.de_AT.yml │ │ │ │ │ ├── article_files.el.yml │ │ │ │ │ ├── article_files.en.yml │ │ │ │ │ ├── article_files.en_GB.yml │ │ │ │ │ ├── article_files.es.yml │ │ │ │ │ ├── article_files.es_AR.yml │ │ │ │ │ ├── article_files.fa.yml │ │ │ │ │ ├── article_files.fa_AF.yml │ │ │ │ │ ├── article_files.fr.yml │ │ │ │ │ ├── article_files.he.yml │ │ │ │ │ ├── article_files.hr.yml │ │ │ │ │ ├── article_files.hu.yml │ │ │ │ │ ├── article_files.hy.yml │ │ │ │ │ ├── article_files.hy_AM.yml │ │ │ │ │ ├── article_files.id.yml │ │ │ │ │ ├── article_files.it.yml │ │ │ │ │ ├── article_files.ka.yml │ │ │ │ │ ├── article_files.ko.yml │ │ │ │ │ ├── article_files.ku.yml │ │ │ │ │ ├── article_files.lv.yml │ │ │ │ │ ├── article_files.mr.yml │ │ │ │ │ ├── article_files.nb_NO.yml │ │ │ │ │ ├── article_files.nl.yml │ │ │ │ │ ├── article_files.pa.yml │ │ │ │ │ ├── article_files.pl.yml │ │ │ │ │ ├── article_files.ps.yml │ │ │ │ │ ├── article_files.pt.yml │ │ │ │ │ ├── article_files.pt_BR.yml │ │ │ │ │ ├── article_files.ro.yml │ │ │ │ │ ├── article_files.ru.yml │ │ │ │ │ ├── article_files.sh.yml │ │ │ │ │ ├── article_files.sq.yml │ │ │ │ │ ├── article_files.sr.yml │ │ │ │ │ ├── article_files.sv.yml │ │ │ │ │ ├── article_files.tr.yml │ │ │ │ │ ├── article_files.uk.yml │ │ │ │ │ ├── article_files.vi.yml │ │ │ │ │ ├── article_files.zh.yml │ │ │ │ │ ├── article_files.zh_TW.yml │ │ │ │ │ ├── article_images.ar.yml │ │ │ │ │ ├── article_images.az.yml │ │ │ │ │ ├── article_images.be.yml │ │ │ │ │ ├── article_images.bn.yml │ │ │ │ │ ├── article_images.cs.yml │ │ │ │ │ ├── article_images.da.yml │ │ │ │ │ ├── article_images.de.yml │ │ │ │ │ ├── article_images.de_AT.yml │ │ │ │ │ ├── article_images.el.yml │ │ │ │ │ ├── article_images.en.yml │ │ │ │ │ ├── article_images.en_GB.yml │ │ │ │ │ ├── article_images.es.yml │ │ │ │ │ ├── article_images.es_AR.yml │ │ │ │ │ ├── article_images.fa.yml │ │ │ │ │ ├── article_images.fa_AF.yml │ │ │ │ │ ├── article_images.fr.yml │ │ │ │ │ ├── article_images.he.yml │ │ │ │ │ ├── article_images.hr.yml │ │ │ │ │ ├── article_images.hu.yml │ │ │ │ │ ├── article_images.hy.yml │ │ │ │ │ ├── article_images.hy_AM.yml │ │ │ │ │ ├── article_images.id.yml │ │ │ │ │ ├── article_images.it.yml │ │ │ │ │ ├── article_images.ka.yml │ │ │ │ │ ├── article_images.ko.yml │ │ │ │ │ ├── article_images.ku.yml │ │ │ │ │ ├── article_images.lv.yml │ │ │ │ │ ├── article_images.mr.yml │ │ │ │ │ ├── article_images.nb_NO.yml │ │ │ │ │ ├── article_images.nl.yml │ │ │ │ │ ├── article_images.pa.yml │ │ │ │ │ ├── article_images.pl.yml │ │ │ │ │ ├── article_images.ps.yml │ │ │ │ │ ├── article_images.pt.yml │ │ │ │ │ ├── article_images.pt_BR.yml │ │ │ │ │ ├── article_images.ro.yml │ │ │ │ │ ├── article_images.ru.yml │ │ │ │ │ ├── article_images.sh.yml │ │ │ │ │ ├── article_images.sq.yml │ │ │ │ │ ├── article_images.sr.yml │ │ │ │ │ ├── article_images.sv.yml │ │ │ │ │ ├── article_images.tr.yml │ │ │ │ │ ├── article_images.uk.yml │ │ │ │ │ ├── article_images.vi.yml │ │ │ │ │ ├── article_images.zh.yml │ │ │ │ │ ├── article_images.zh_TW.yml │ │ │ │ │ ├── article_topics.ar.yml │ │ │ │ │ ├── article_topics.az.yml │ │ │ │ │ ├── article_topics.be.yml │ │ │ │ │ ├── article_topics.bn.yml │ │ │ │ │ ├── article_topics.cs.yml │ │ │ │ │ ├── article_topics.da.yml │ │ │ │ │ ├── article_topics.de.yml │ │ │ │ │ ├── article_topics.de_AT.yml │ │ │ │ │ ├── article_topics.el.yml │ │ │ │ │ ├── article_topics.en.yml │ │ │ │ │ ├── article_topics.en_GB.yml │ │ │ │ │ ├── article_topics.es.yml │ │ │ │ │ ├── article_topics.es_AR.yml │ │ │ │ │ ├── article_topics.fa.yml │ │ │ │ │ ├── article_topics.fa_AF.yml │ │ │ │ │ ├── article_topics.fr.yml │ │ │ │ │ ├── article_topics.he.yml │ │ │ │ │ ├── article_topics.hr.yml │ │ │ │ │ ├── article_topics.hu.yml │ │ │ │ │ ├── article_topics.hy.yml │ │ │ │ │ ├── article_topics.hy_AM.yml │ │ │ │ │ ├── article_topics.id.yml │ │ │ │ │ ├── article_topics.it.yml │ │ │ │ │ ├── article_topics.ka.yml │ │ │ │ │ ├── article_topics.ko.yml │ │ │ │ │ ├── article_topics.ku.yml │ │ │ │ │ ├── article_topics.lv.yml │ │ │ │ │ ├── article_topics.mr.yml │ │ │ │ │ ├── article_topics.nb_NO.yml │ │ │ │ │ ├── article_topics.nl.yml │ │ │ │ │ ├── article_topics.pa.yml │ │ │ │ │ ├── article_topics.pl.yml │ │ │ │ │ ├── article_topics.ps.yml │ │ │ │ │ ├── article_topics.pt.yml │ │ │ │ │ ├── article_topics.pt_BR.yml │ │ │ │ │ ├── article_topics.ro.yml │ │ │ │ │ ├── article_topics.ru.yml │ │ │ │ │ ├── article_topics.sh.yml │ │ │ │ │ ├── article_topics.sq.yml │ │ │ │ │ ├── article_topics.sr.yml │ │ │ │ │ ├── article_topics.sv.yml │ │ │ │ │ ├── article_topics.tr.yml │ │ │ │ │ ├── article_topics.uk.yml │ │ │ │ │ ├── article_topics.vi.yml │ │ │ │ │ ├── article_topics.zh.yml │ │ │ │ │ ├── article_topics.zh_TW.yml │ │ │ │ │ ├── article_type_fields.ar.yml │ │ │ │ │ ├── article_type_fields.az.yml │ │ │ │ │ ├── article_type_fields.be.yml │ │ │ │ │ ├── article_type_fields.bn.yml │ │ │ │ │ ├── article_type_fields.cs.yml │ │ │ │ │ ├── article_type_fields.da.yml │ │ │ │ │ ├── article_type_fields.de.yml │ │ │ │ │ ├── article_type_fields.de_AT.yml │ │ │ │ │ ├── article_type_fields.el.yml │ │ │ │ │ ├── article_type_fields.en.yml │ │ │ │ │ ├── article_type_fields.en_GB.yml │ │ │ │ │ ├── article_type_fields.es.yml │ │ │ │ │ ├── article_type_fields.es_AR.yml │ │ │ │ │ ├── article_type_fields.fa.yml │ │ │ │ │ ├── article_type_fields.fa_AF.yml │ │ │ │ │ ├── article_type_fields.fr.yml │ │ │ │ │ ├── article_type_fields.he.yml │ │ │ │ │ ├── article_type_fields.hr.yml │ │ │ │ │ ├── article_type_fields.hu.yml │ │ │ │ │ ├── article_type_fields.hy.yml │ │ │ │ │ ├── article_type_fields.hy_AM.yml │ │ │ │ │ ├── article_type_fields.id.yml │ │ │ │ │ ├── article_type_fields.it.yml │ │ │ │ │ ├── article_type_fields.ka.yml │ │ │ │ │ ├── article_type_fields.ko.yml │ │ │ │ │ ├── article_type_fields.ku.yml │ │ │ │ │ ├── article_type_fields.lv.yml │ │ │ │ │ ├── article_type_fields.mr.yml │ │ │ │ │ ├── article_type_fields.nb_NO.yml │ │ │ │ │ ├── article_type_fields.nl.yml │ │ │ │ │ ├── article_type_fields.pa.yml │ │ │ │ │ ├── article_type_fields.pl.yml │ │ │ │ │ ├── article_type_fields.ps.yml │ │ │ │ │ ├── article_type_fields.pt.yml │ │ │ │ │ ├── article_type_fields.pt_BR.yml │ │ │ │ │ ├── article_type_fields.ro.yml │ │ │ │ │ ├── article_type_fields.ru.yml │ │ │ │ │ ├── article_type_fields.sh.yml │ │ │ │ │ ├── article_type_fields.sq.yml │ │ │ │ │ ├── article_type_fields.sr.yml │ │ │ │ │ ├── article_type_fields.sv.yml │ │ │ │ │ ├── article_type_fields.tr.yml │ │ │ │ │ ├── article_type_fields.uk.yml │ │ │ │ │ ├── article_type_fields.vi.yml │ │ │ │ │ ├── article_type_fields.zh.yml │ │ │ │ │ ├── article_type_fields.zh_TW.yml │ │ │ │ │ ├── article_types.ar.yml │ │ │ │ │ ├── article_types.az.yml │ │ │ │ │ ├── article_types.be.yml │ │ │ │ │ ├── article_types.bn.yml │ │ │ │ │ ├── article_types.cs.yml │ │ │ │ │ ├── article_types.da.yml │ │ │ │ │ ├── article_types.de.yml │ │ │ │ │ ├── article_types.de_AT.yml │ │ │ │ │ ├── article_types.el.yml │ │ │ │ │ ├── article_types.en.yml │ │ │ │ │ ├── article_types.en.yml~ │ │ │ │ │ ├── article_types.en_GB.yml │ │ │ │ │ ├── article_types.es.yml │ │ │ │ │ ├── article_types.es_AR.yml │ │ │ │ │ ├── article_types.fa.yml │ │ │ │ │ ├── article_types.fa_AF.yml │ │ │ │ │ ├── article_types.fr.yml │ │ │ │ │ ├── article_types.he.yml │ │ │ │ │ ├── article_types.hr.yml │ │ │ │ │ ├── article_types.hu.yml │ │ │ │ │ ├── article_types.hy.yml │ │ │ │ │ ├── article_types.hy_AM.yml │ │ │ │ │ ├── article_types.id.yml │ │ │ │ │ ├── article_types.it.yml │ │ │ │ │ ├── article_types.ka.yml │ │ │ │ │ ├── article_types.ko.yml │ │ │ │ │ ├── article_types.ku.yml │ │ │ │ │ ├── article_types.lv.yml │ │ │ │ │ ├── article_types.mr.yml │ │ │ │ │ ├── article_types.nb_NO.yml │ │ │ │ │ ├── article_types.nl.yml │ │ │ │ │ ├── article_types.pa.yml │ │ │ │ │ ├── article_types.pl.yml │ │ │ │ │ ├── article_types.ps.yml │ │ │ │ │ ├── article_types.pt.yml │ │ │ │ │ ├── article_types.pt_BR.yml │ │ │ │ │ ├── article_types.ro.yml │ │ │ │ │ ├── article_types.ru.yml │ │ │ │ │ ├── article_types.sh.yml │ │ │ │ │ ├── article_types.sq.yml │ │ │ │ │ ├── article_types.sr.yml │ │ │ │ │ ├── article_types.sv.yml │ │ │ │ │ ├── article_types.tr.yml │ │ │ │ │ ├── article_types.uk.yml │ │ │ │ │ ├── article_types.vi.yml │ │ │ │ │ ├── article_types.zh.yml │ │ │ │ │ ├── article_types.zh_TW.yml │ │ │ │ │ ├── articles.ar.yml │ │ │ │ │ ├── articles.az.yml │ │ │ │ │ ├── articles.be.yml │ │ │ │ │ ├── articles.bn.yml │ │ │ │ │ ├── articles.cs.yml │ │ │ │ │ ├── articles.da.yml │ │ │ │ │ ├── articles.de.yml │ │ │ │ │ ├── articles.de_AT.yml │ │ │ │ │ ├── articles.el.yml │ │ │ │ │ ├── articles.en.yml │ │ │ │ │ ├── articles.en_GB.yml │ │ │ │ │ ├── articles.es.yml │ │ │ │ │ ├── articles.es_AR.yml │ │ │ │ │ ├── articles.fa.yml │ │ │ │ │ ├── articles.fa_AF.yml │ │ │ │ │ ├── articles.fr.yml │ │ │ │ │ ├── articles.he.yml │ │ │ │ │ ├── articles.hr.yml │ │ │ │ │ ├── articles.hu.yml │ │ │ │ │ ├── articles.hy.yml │ │ │ │ │ ├── articles.hy_AM.yml │ │ │ │ │ ├── articles.id.yml │ │ │ │ │ ├── articles.it.yml │ │ │ │ │ ├── articles.ka.yml │ │ │ │ │ ├── articles.ko.yml │ │ │ │ │ ├── articles.ku.yml │ │ │ │ │ ├── articles.lv.yml │ │ │ │ │ ├── articles.mr.yml │ │ │ │ │ ├── articles.nb_NO.yml │ │ │ │ │ ├── articles.nl.yml │ │ │ │ │ ├── articles.pa.yml │ │ │ │ │ ├── articles.pl.yml │ │ │ │ │ ├── articles.ps.yml │ │ │ │ │ ├── articles.pt.yml │ │ │ │ │ ├── articles.pt_BR.yml │ │ │ │ │ ├── articles.ro.yml │ │ │ │ │ ├── articles.ru.yml │ │ │ │ │ ├── articles.sh.yml │ │ │ │ │ ├── articles.sq.yml │ │ │ │ │ ├── articles.sr.yml │ │ │ │ │ ├── articles.sv.yml │ │ │ │ │ ├── articles.tr.yml │ │ │ │ │ ├── articles.uk.yml │ │ │ │ │ ├── articles.vi.yml │ │ │ │ │ ├── articles.zh.yml │ │ │ │ │ ├── articles.zh_TW.yml │ │ │ │ │ ├── authors.ar.yml │ │ │ │ │ ├── authors.az.yml │ │ │ │ │ ├── authors.be.yml │ │ │ │ │ ├── authors.bn.yml │ │ │ │ │ ├── authors.cs.yml │ │ │ │ │ ├── authors.da.yml │ │ │ │ │ ├── authors.de.yml │ │ │ │ │ ├── authors.de_AT.yml │ │ │ │ │ ├── authors.el.yml │ │ │ │ │ ├── authors.en.yml │ │ │ │ │ ├── authors.en_GB.yml │ │ │ │ │ ├── authors.es.yml │ │ │ │ │ ├── authors.es_AR.yml │ │ │ │ │ ├── authors.fa.yml │ │ │ │ │ ├── authors.fa_AF.yml │ │ │ │ │ ├── authors.fr.yml │ │ │ │ │ ├── authors.he.yml │ │ │ │ │ ├── authors.hr.yml │ │ │ │ │ ├── authors.hu.yml │ │ │ │ │ ├── authors.hy.yml │ │ │ │ │ ├── authors.hy_AM.yml │ │ │ │ │ ├── authors.id.yml │ │ │ │ │ ├── authors.it.yml │ │ │ │ │ ├── authors.ka.yml │ │ │ │ │ ├── authors.ko.yml │ │ │ │ │ ├── authors.ku.yml │ │ │ │ │ ├── authors.lv.yml │ │ │ │ │ ├── authors.mr.yml │ │ │ │ │ ├── authors.nb_NO.yml │ │ │ │ │ ├── authors.nl.yml │ │ │ │ │ ├── authors.pa.yml │ │ │ │ │ ├── authors.pl.yml │ │ │ │ │ ├── authors.ps.yml │ │ │ │ │ ├── authors.pt.yml │ │ │ │ │ ├── authors.pt_BR.yml │ │ │ │ │ ├── authors.ro.yml │ │ │ │ │ ├── authors.ru.yml │ │ │ │ │ ├── authors.sh.yml │ │ │ │ │ ├── authors.sq.yml │ │ │ │ │ ├── authors.sr.yml │ │ │ │ │ ├── authors.sv.yml │ │ │ │ │ ├── authors.tr.yml │ │ │ │ │ ├── authors.uk.yml │ │ │ │ │ ├── authors.vi.yml │ │ │ │ │ ├── authors.zh.yml │ │ │ │ │ ├── authors.zh_TW.yml │ │ │ │ │ ├── bug_reporting.ar.yml │ │ │ │ │ ├── bug_reporting.az.yml │ │ │ │ │ ├── bug_reporting.be.yml │ │ │ │ │ ├── bug_reporting.bn.yml │ │ │ │ │ ├── bug_reporting.cs.yml │ │ │ │ │ ├── bug_reporting.da.yml │ │ │ │ │ ├── bug_reporting.de.yml │ │ │ │ │ ├── bug_reporting.de_AT.yml │ │ │ │ │ ├── bug_reporting.el.yml │ │ │ │ │ ├── bug_reporting.en.yml │ │ │ │ │ ├── bug_reporting.en_GB.yml │ │ │ │ │ ├── bug_reporting.es.yml │ │ │ │ │ ├── bug_reporting.es_AR.yml │ │ │ │ │ ├── bug_reporting.fa.yml │ │ │ │ │ ├── bug_reporting.fa_AF.yml │ │ │ │ │ ├── bug_reporting.fr.yml │ │ │ │ │ ├── bug_reporting.he.yml │ │ │ │ │ ├── bug_reporting.hr.yml │ │ │ │ │ ├── bug_reporting.hu.yml │ │ │ │ │ ├── bug_reporting.hy.yml │ │ │ │ │ ├── bug_reporting.hy_AM.yml │ │ │ │ │ ├── bug_reporting.id.yml │ │ │ │ │ ├── bug_reporting.it.yml │ │ │ │ │ ├── bug_reporting.ka.yml │ │ │ │ │ ├── bug_reporting.ko.yml │ │ │ │ │ ├── bug_reporting.ku.yml │ │ │ │ │ ├── bug_reporting.lv.yml │ │ │ │ │ ├── bug_reporting.mr.yml │ │ │ │ │ ├── bug_reporting.nb_NO.yml │ │ │ │ │ ├── bug_reporting.nl.yml │ │ │ │ │ ├── bug_reporting.pa.yml │ │ │ │ │ ├── bug_reporting.pl.yml │ │ │ │ │ ├── bug_reporting.ps.yml │ │ │ │ │ ├── bug_reporting.pt.yml │ │ │ │ │ ├── bug_reporting.pt_BR.yml │ │ │ │ │ ├── bug_reporting.ro.yml │ │ │ │ │ ├── bug_reporting.ru.yml │ │ │ │ │ ├── bug_reporting.sh.yml │ │ │ │ │ ├── bug_reporting.sq.yml │ │ │ │ │ ├── bug_reporting.sr.yml │ │ │ │ │ ├── bug_reporting.sv.yml │ │ │ │ │ ├── bug_reporting.tr.yml │ │ │ │ │ ├── bug_reporting.uk.yml │ │ │ │ │ ├── bug_reporting.vi.yml │ │ │ │ │ ├── bug_reporting.zh.yml │ │ │ │ │ ├── bug_reporting.zh_TW.yml │ │ │ │ │ ├── comments.ar.yml │ │ │ │ │ ├── comments.az.yml │ │ │ │ │ ├── comments.be.yml │ │ │ │ │ ├── comments.bn.yml │ │ │ │ │ ├── comments.cs.yml │ │ │ │ │ ├── comments.da.yml │ │ │ │ │ ├── comments.de.yml │ │ │ │ │ ├── comments.de_AT.yml │ │ │ │ │ ├── comments.el.yml │ │ │ │ │ ├── comments.en.yml │ │ │ │ │ ├── comments.en_GB.yml │ │ │ │ │ ├── comments.es.yml │ │ │ │ │ ├── comments.es_AR.yml │ │ │ │ │ ├── comments.fa.yml │ │ │ │ │ ├── comments.fa_AF.yml │ │ │ │ │ ├── comments.fr.yml │ │ │ │ │ ├── comments.he.yml │ │ │ │ │ ├── comments.hr.yml │ │ │ │ │ ├── comments.hu.yml │ │ │ │ │ ├── comments.hy.yml │ │ │ │ │ ├── comments.hy_AM.yml │ │ │ │ │ ├── comments.id.yml │ │ │ │ │ ├── comments.it.yml │ │ │ │ │ ├── comments.ka.yml │ │ │ │ │ ├── comments.ko.yml │ │ │ │ │ ├── comments.ku.yml │ │ │ │ │ ├── comments.lv.yml │ │ │ │ │ ├── comments.mr.yml │ │ │ │ │ ├── comments.nb_NO.yml │ │ │ │ │ ├── comments.nl.yml │ │ │ │ │ ├── comments.pa.yml │ │ │ │ │ ├── comments.pl.yml │ │ │ │ │ ├── comments.ps.yml │ │ │ │ │ ├── comments.pt.yml │ │ │ │ │ ├── comments.pt_BR.yml │ │ │ │ │ ├── comments.ro.yml │ │ │ │ │ ├── comments.ru.yml │ │ │ │ │ ├── comments.sh.yml │ │ │ │ │ ├── comments.sq.yml │ │ │ │ │ ├── comments.sr.yml │ │ │ │ │ ├── comments.sv.yml │ │ │ │ │ ├── comments.tr.yml │ │ │ │ │ ├── comments.uk.yml │ │ │ │ │ ├── comments.vi.yml │ │ │ │ │ ├── comments.zh.yml │ │ │ │ │ ├── comments.zh_TW.yml │ │ │ │ │ ├── country.ar.yml │ │ │ │ │ ├── country.az.yml │ │ │ │ │ ├── country.be.yml │ │ │ │ │ ├── country.bn.yml │ │ │ │ │ ├── country.cs.yml │ │ │ │ │ ├── country.da.yml │ │ │ │ │ ├── country.de.yml │ │ │ │ │ ├── country.de_AT.yml │ │ │ │ │ ├── country.el.yml │ │ │ │ │ ├── country.en.yml │ │ │ │ │ ├── country.en_GB.yml │ │ │ │ │ ├── country.es.yml │ │ │ │ │ ├── country.es_AR.yml │ │ │ │ │ ├── country.fa.yml │ │ │ │ │ ├── country.fa_AF.yml │ │ │ │ │ ├── country.fr.yml │ │ │ │ │ ├── country.he.yml │ │ │ │ │ ├── country.hr.yml │ │ │ │ │ ├── country.hu.yml │ │ │ │ │ ├── country.hy.yml │ │ │ │ │ ├── country.hy_AM.yml │ │ │ │ │ ├── country.id.yml │ │ │ │ │ ├── country.it.yml │ │ │ │ │ ├── country.ka.yml │ │ │ │ │ ├── country.ko.yml │ │ │ │ │ ├── country.ku.yml │ │ │ │ │ ├── country.lv.yml │ │ │ │ │ ├── country.mr.yml │ │ │ │ │ ├── country.nb_NO.yml │ │ │ │ │ ├── country.nl.yml │ │ │ │ │ ├── country.pa.yml │ │ │ │ │ ├── country.pl.yml │ │ │ │ │ ├── country.ps.yml │ │ │ │ │ ├── country.pt.yml │ │ │ │ │ ├── country.pt_BR.yml │ │ │ │ │ ├── country.ro.yml │ │ │ │ │ ├── country.ru.yml │ │ │ │ │ ├── country.sh.yml │ │ │ │ │ ├── country.sq.yml │ │ │ │ │ ├── country.sr.yml │ │ │ │ │ ├── country.sv.yml │ │ │ │ │ ├── country.tr.yml │ │ │ │ │ ├── country.uk.yml │ │ │ │ │ ├── country.vi.yml │ │ │ │ │ ├── country.zh.yml │ │ │ │ │ ├── country.zh_TW.yml │ │ │ │ │ ├── extensions.ar.yml │ │ │ │ │ ├── extensions.az.yml │ │ │ │ │ ├── extensions.be.yml │ │ │ │ │ ├── extensions.bn.yml │ │ │ │ │ ├── extensions.cs.yml │ │ │ │ │ ├── extensions.da.yml │ │ │ │ │ ├── extensions.de.yml │ │ │ │ │ ├── extensions.de_AT.yml │ │ │ │ │ ├── extensions.el.yml │ │ │ │ │ ├── extensions.en.yml │ │ │ │ │ ├── extensions.en_GB.yml │ │ │ │ │ ├── extensions.es.yml │ │ │ │ │ ├── extensions.es_AR.yml │ │ │ │ │ ├── extensions.fa.yml │ │ │ │ │ ├── extensions.fa_AF.yml │ │ │ │ │ ├── extensions.fr.yml │ │ │ │ │ ├── extensions.he.yml │ │ │ │ │ ├── extensions.hr.yml │ │ │ │ │ ├── extensions.hu.yml │ │ │ │ │ ├── extensions.hy.yml │ │ │ │ │ ├── extensions.hy_AM.yml │ │ │ │ │ ├── extensions.id.yml │ │ │ │ │ ├── extensions.it.yml │ │ │ │ │ ├── extensions.ka.yml │ │ │ │ │ ├── extensions.ko.yml │ │ │ │ │ ├── extensions.ku.yml │ │ │ │ │ ├── extensions.lv.yml │ │ │ │ │ ├── extensions.mr.yml │ │ │ │ │ ├── extensions.nb_NO.yml │ │ │ │ │ ├── extensions.nl.yml │ │ │ │ │ ├── extensions.pa.yml │ │ │ │ │ ├── extensions.pl.yml │ │ │ │ │ ├── extensions.ps.yml │ │ │ │ │ ├── extensions.pt.yml │ │ │ │ │ ├── extensions.pt_BR.yml │ │ │ │ │ ├── extensions.ro.yml │ │ │ │ │ ├── extensions.ru.yml │ │ │ │ │ ├── extensions.sh.yml │ │ │ │ │ ├── extensions.sq.yml │ │ │ │ │ ├── extensions.sr.yml │ │ │ │ │ ├── extensions.sv.yml │ │ │ │ │ ├── extensions.tr.yml │ │ │ │ │ ├── extensions.uk.yml │ │ │ │ │ ├── extensions.vi.yml │ │ │ │ │ ├── extensions.zh.yml │ │ │ │ │ ├── extensions.zh_TW.yml │ │ │ │ │ ├── feedback.ar.yml │ │ │ │ │ ├── feedback.az.yml │ │ │ │ │ ├── feedback.be.yml │ │ │ │ │ ├── feedback.bn.yml │ │ │ │ │ ├── feedback.cs.yml │ │ │ │ │ ├── feedback.da.yml │ │ │ │ │ ├── feedback.de.yml │ │ │ │ │ ├── feedback.de_AT.yml │ │ │ │ │ ├── feedback.el.yml │ │ │ │ │ ├── feedback.en.yml │ │ │ │ │ ├── feedback.en_GB.yml │ │ │ │ │ ├── feedback.es.yml │ │ │ │ │ ├── feedback.es_AR.yml │ │ │ │ │ ├── feedback.fa.yml │ │ │ │ │ ├── feedback.fa_AF.yml │ │ │ │ │ ├── feedback.fr.yml │ │ │ │ │ ├── feedback.he.yml │ │ │ │ │ ├── feedback.hr.yml │ │ │ │ │ ├── feedback.hu.yml │ │ │ │ │ ├── feedback.hy.yml │ │ │ │ │ ├── feedback.hy_AM.yml │ │ │ │ │ ├── feedback.id.yml │ │ │ │ │ ├── feedback.it.yml │ │ │ │ │ ├── feedback.ka.yml │ │ │ │ │ ├── feedback.ko.yml │ │ │ │ │ ├── feedback.ku.yml │ │ │ │ │ ├── feedback.lv.yml │ │ │ │ │ ├── feedback.mr.yml │ │ │ │ │ ├── feedback.nb_NO.yml │ │ │ │ │ ├── feedback.nl.yml │ │ │ │ │ ├── feedback.pa.yml │ │ │ │ │ ├── feedback.pl.yml │ │ │ │ │ ├── feedback.ps.yml │ │ │ │ │ ├── feedback.pt.yml │ │ │ │ │ ├── feedback.pt_BR.yml │ │ │ │ │ ├── feedback.ro.yml │ │ │ │ │ ├── feedback.ru.yml │ │ │ │ │ ├── feedback.sh.yml │ │ │ │ │ ├── feedback.sq.yml │ │ │ │ │ ├── feedback.sr.yml │ │ │ │ │ ├── feedback.sv.yml │ │ │ │ │ ├── feedback.tr.yml │ │ │ │ │ ├── feedback.uk.yml │ │ │ │ │ ├── feedback.vi.yml │ │ │ │ │ ├── feedback.zh.yml │ │ │ │ │ ├── feedback.zh_TW.yml │ │ │ │ │ ├── geolocation.ar.yml │ │ │ │ │ ├── geolocation.az.yml │ │ │ │ │ ├── geolocation.be.yml │ │ │ │ │ ├── geolocation.bn.yml │ │ │ │ │ ├── geolocation.cs.yml │ │ │ │ │ ├── geolocation.da.yml │ │ │ │ │ ├── geolocation.de.yml │ │ │ │ │ ├── geolocation.de_AT.yml │ │ │ │ │ ├── geolocation.el.yml │ │ │ │ │ ├── geolocation.en.yml │ │ │ │ │ ├── geolocation.en_GB.yml │ │ │ │ │ ├── geolocation.es.yml │ │ │ │ │ ├── geolocation.es_AR.yml │ │ │ │ │ ├── geolocation.fa.yml │ │ │ │ │ ├── geolocation.fa_AF.yml │ │ │ │ │ ├── geolocation.fr.yml │ │ │ │ │ ├── geolocation.he.yml │ │ │ │ │ ├── geolocation.hr.yml │ │ │ │ │ ├── geolocation.hu.yml │ │ │ │ │ ├── geolocation.hy.yml │ │ │ │ │ ├── geolocation.hy_AM.yml │ │ │ │ │ ├── geolocation.id.yml │ │ │ │ │ ├── geolocation.it.yml │ │ │ │ │ ├── geolocation.ka.yml │ │ │ │ │ ├── geolocation.ko.yml │ │ │ │ │ ├── geolocation.ku.yml │ │ │ │ │ ├── geolocation.lv.yml │ │ │ │ │ ├── geolocation.mr.yml │ │ │ │ │ ├── geolocation.nb_NO.yml │ │ │ │ │ ├── geolocation.nl.yml │ │ │ │ │ ├── geolocation.pa.yml │ │ │ │ │ ├── geolocation.pl.yml │ │ │ │ │ ├── geolocation.ps.yml │ │ │ │ │ ├── geolocation.pt.yml │ │ │ │ │ ├── geolocation.pt_BR.yml │ │ │ │ │ ├── geolocation.ro.yml │ │ │ │ │ ├── geolocation.ru.yml │ │ │ │ │ ├── geolocation.sh.yml │ │ │ │ │ ├── geolocation.sq.yml │ │ │ │ │ ├── geolocation.sr.yml │ │ │ │ │ ├── geolocation.sv.yml │ │ │ │ │ ├── geolocation.tr.yml │ │ │ │ │ ├── geolocation.uk.yml │ │ │ │ │ ├── geolocation.vi.yml │ │ │ │ │ ├── geolocation.zh.yml │ │ │ │ │ ├── geolocation.zh_TW.yml │ │ │ │ │ ├── help.ar.yml │ │ │ │ │ ├── help.az.yml │ │ │ │ │ ├── help.be.yml │ │ │ │ │ ├── help.bn.yml │ │ │ │ │ ├── help.cs.yml │ │ │ │ │ ├── help.da.yml │ │ │ │ │ ├── help.de.yml │ │ │ │ │ ├── help.de_AT.yml │ │ │ │ │ ├── help.el.yml │ │ │ │ │ ├── help.en.yml │ │ │ │ │ ├── help.en_GB.yml │ │ │ │ │ ├── help.es.yml │ │ │ │ │ ├── help.es_AR.yml │ │ │ │ │ ├── help.fa.yml │ │ │ │ │ ├── help.fa_AF.yml │ │ │ │ │ ├── help.fr.yml │ │ │ │ │ ├── help.he.yml │ │ │ │ │ ├── help.hr.yml │ │ │ │ │ ├── help.hu.yml │ │ │ │ │ ├── help.hy.yml │ │ │ │ │ ├── help.hy_AM.yml │ │ │ │ │ ├── help.id.yml │ │ │ │ │ ├── help.it.yml │ │ │ │ │ ├── help.ka.yml │ │ │ │ │ ├── help.ko.yml │ │ │ │ │ ├── help.ku.yml │ │ │ │ │ ├── help.lv.yml │ │ │ │ │ ├── help.mr.yml │ │ │ │ │ ├── help.nb_NO.yml │ │ │ │ │ ├── help.nl.yml │ │ │ │ │ ├── help.pa.yml │ │ │ │ │ ├── help.pl.yml │ │ │ │ │ ├── help.ps.yml │ │ │ │ │ ├── help.pt.yml │ │ │ │ │ ├── help.pt_BR.yml │ │ │ │ │ ├── help.ro.yml │ │ │ │ │ ├── help.ru.yml │ │ │ │ │ ├── help.sh.yml │ │ │ │ │ ├── help.sq.yml │ │ │ │ │ ├── help.sr.yml │ │ │ │ │ ├── help.sv.yml │ │ │ │ │ ├── help.tr.yml │ │ │ │ │ ├── help.uk.yml │ │ │ │ │ ├── help.vi.yml │ │ │ │ │ ├── help.zh.yml │ │ │ │ │ ├── help.zh_TW.yml │ │ │ │ │ ├── helpers.ar.yml │ │ │ │ │ ├── helpers.az.yml │ │ │ │ │ ├── helpers.be.yml │ │ │ │ │ ├── helpers.bn.yml │ │ │ │ │ ├── helpers.cs.yml │ │ │ │ │ ├── helpers.da.yml │ │ │ │ │ ├── helpers.de.yml │ │ │ │ │ ├── helpers.de_AT.yml │ │ │ │ │ ├── helpers.el.yml │ │ │ │ │ ├── helpers.en.yml │ │ │ │ │ ├── helpers.en_GB.yml │ │ │ │ │ ├── helpers.es.yml │ │ │ │ │ ├── helpers.es_AR.yml │ │ │ │ │ ├── helpers.fa.yml │ │ │ │ │ ├── helpers.fa_AF.yml │ │ │ │ │ ├── helpers.fr.yml │ │ │ │ │ ├── helpers.he.yml │ │ │ │ │ ├── helpers.hr.yml │ │ │ │ │ ├── helpers.hu.yml │ │ │ │ │ ├── helpers.hy.yml │ │ │ │ │ ├── helpers.hy_AM.yml │ │ │ │ │ ├── helpers.id.yml │ │ │ │ │ ├── helpers.it.yml │ │ │ │ │ ├── helpers.ka.yml │ │ │ │ │ ├── helpers.ko.yml │ │ │ │ │ ├── helpers.ku.yml │ │ │ │ │ ├── helpers.lv.yml │ │ │ │ │ ├── helpers.mr.yml │ │ │ │ │ ├── helpers.nb_NO.yml │ │ │ │ │ ├── helpers.nl.yml │ │ │ │ │ ├── helpers.pa.yml │ │ │ │ │ ├── helpers.pl.yml │ │ │ │ │ ├── helpers.ps.yml │ │ │ │ │ ├── helpers.pt.yml │ │ │ │ │ ├── helpers.pt_BR.yml │ │ │ │ │ ├── helpers.ro.yml │ │ │ │ │ ├── helpers.ru.yml │ │ │ │ │ ├── helpers.sh.yml │ │ │ │ │ ├── helpers.sq.yml │ │ │ │ │ ├── helpers.sr.yml │ │ │ │ │ ├── helpers.sv.yml │ │ │ │ │ ├── helpers.tr.yml │ │ │ │ │ ├── helpers.uk.yml │ │ │ │ │ ├── helpers.vi.yml │ │ │ │ │ ├── helpers.zh.yml │ │ │ │ │ ├── helpers.zh_TW.yml │ │ │ │ │ ├── home.ar.yml │ │ │ │ │ ├── home.az.yml │ │ │ │ │ ├── home.be.yml │ │ │ │ │ ├── home.bn.yml │ │ │ │ │ ├── home.cs.yml │ │ │ │ │ ├── home.da.yml │ │ │ │ │ ├── home.de.yml │ │ │ │ │ ├── home.de_AT.yml │ │ │ │ │ ├── home.el.yml │ │ │ │ │ ├── home.en.yml │ │ │ │ │ ├── home.en.yml~ │ │ │ │ │ ├── home.en_GB.yml │ │ │ │ │ ├── home.es.yml │ │ │ │ │ ├── home.es_AR.yml │ │ │ │ │ ├── home.fa.yml │ │ │ │ │ ├── home.fa_AF.yml │ │ │ │ │ ├── home.fr.yml │ │ │ │ │ ├── home.he.yml │ │ │ │ │ ├── home.hr.yml │ │ │ │ │ ├── home.hu.yml │ │ │ │ │ ├── home.hy.yml │ │ │ │ │ ├── home.hy_AM.yml │ │ │ │ │ ├── home.id.yml │ │ │ │ │ ├── home.it.yml │ │ │ │ │ ├── home.ka.yml │ │ │ │ │ ├── home.ko.yml │ │ │ │ │ ├── home.ku.yml │ │ │ │ │ ├── home.lv.yml │ │ │ │ │ ├── home.mr.yml │ │ │ │ │ ├── home.nb_NO.yml │ │ │ │ │ ├── home.nl.yml │ │ │ │ │ ├── home.pa.yml │ │ │ │ │ ├── home.pl.yml │ │ │ │ │ ├── home.ps.yml │ │ │ │ │ ├── home.pt.yml │ │ │ │ │ ├── home.pt_BR.yml │ │ │ │ │ ├── home.ro.yml │ │ │ │ │ ├── home.ru.yml │ │ │ │ │ ├── home.sh.yml │ │ │ │ │ ├── home.sq.yml │ │ │ │ │ ├── home.sr.yml │ │ │ │ │ ├── home.sv.yml │ │ │ │ │ ├── home.tr.yml │ │ │ │ │ ├── home.uk.yml │ │ │ │ │ ├── home.vi.yml │ │ │ │ │ ├── home.zh.yml │ │ │ │ │ ├── home.zh_TW.yml │ │ │ │ │ ├── issues.ar.yml │ │ │ │ │ ├── issues.az.yml │ │ │ │ │ ├── issues.be.yml │ │ │ │ │ ├── issues.bn.yml │ │ │ │ │ ├── issues.cs.yml │ │ │ │ │ ├── issues.da.yml │ │ │ │ │ ├── issues.de.yml │ │ │ │ │ ├── issues.de_AT.yml │ │ │ │ │ ├── issues.el.yml │ │ │ │ │ ├── issues.en.yml │ │ │ │ │ ├── issues.en_GB.yml │ │ │ │ │ ├── issues.es.yml │ │ │ │ │ ├── issues.es_AR.yml │ │ │ │ │ ├── issues.fa.yml │ │ │ │ │ ├── issues.fa_AF.yml │ │ │ │ │ ├── issues.fr.yml │ │ │ │ │ ├── issues.he.yml │ │ │ │ │ ├── issues.hr.yml │ │ │ │ │ ├── issues.hu.yml │ │ │ │ │ ├── issues.hy.yml │ │ │ │ │ ├── issues.hy_AM.yml │ │ │ │ │ ├── issues.id.yml │ │ │ │ │ ├── issues.it.yml │ │ │ │ │ ├── issues.ka.yml │ │ │ │ │ ├── issues.ko.yml │ │ │ │ │ ├── issues.ku.yml │ │ │ │ │ ├── issues.lv.yml │ │ │ │ │ ├── issues.mr.yml │ │ │ │ │ ├── issues.nb_NO.yml │ │ │ │ │ ├── issues.nl.yml │ │ │ │ │ ├── issues.pa.yml │ │ │ │ │ ├── issues.pl.yml │ │ │ │ │ ├── issues.ps.yml │ │ │ │ │ ├── issues.pt.yml │ │ │ │ │ ├── issues.pt_BR.yml │ │ │ │ │ ├── issues.ro.yml │ │ │ │ │ ├── issues.ru.yml │ │ │ │ │ ├── issues.sh.yml │ │ │ │ │ ├── issues.sq.yml │ │ │ │ │ ├── issues.sr.yml │ │ │ │ │ ├── issues.sv.yml │ │ │ │ │ ├── issues.tr.yml │ │ │ │ │ ├── issues.uk.yml │ │ │ │ │ ├── issues.vi.yml │ │ │ │ │ ├── issues.zh.yml │ │ │ │ │ ├── issues.zh_TW.yml │ │ │ │ │ ├── languages.ar.yml │ │ │ │ │ ├── languages.az.yml │ │ │ │ │ ├── languages.be.yml │ │ │ │ │ ├── languages.bn.yml │ │ │ │ │ ├── languages.cs.yml │ │ │ │ │ ├── languages.da.yml │ │ │ │ │ ├── languages.de.yml │ │ │ │ │ ├── languages.de_AT.yml │ │ │ │ │ ├── languages.el.yml │ │ │ │ │ ├── languages.en.yml │ │ │ │ │ ├── languages.en_GB.yml │ │ │ │ │ ├── languages.es.yml │ │ │ │ │ ├── languages.es_AR.yml │ │ │ │ │ ├── languages.fa.yml │ │ │ │ │ ├── languages.fa_AF.yml │ │ │ │ │ ├── languages.fr.yml │ │ │ │ │ ├── languages.he.yml │ │ │ │ │ ├── languages.hr.yml │ │ │ │ │ ├── languages.hu.yml │ │ │ │ │ ├── languages.hy.yml │ │ │ │ │ ├── languages.hy_AM.yml │ │ │ │ │ ├── languages.id.yml │ │ │ │ │ ├── languages.it.yml │ │ │ │ │ ├── languages.ka.yml │ │ │ │ │ ├── languages.ko.yml │ │ │ │ │ ├── languages.ku.yml │ │ │ │ │ ├── languages.lv.yml │ │ │ │ │ ├── languages.mr.yml │ │ │ │ │ ├── languages.nb_NO.yml │ │ │ │ │ ├── languages.nl.yml │ │ │ │ │ ├── languages.pa.yml │ │ │ │ │ ├── languages.pl.yml │ │ │ │ │ ├── languages.ps.yml │ │ │ │ │ ├── languages.pt.yml │ │ │ │ │ ├── languages.pt_BR.yml │ │ │ │ │ ├── languages.ro.yml │ │ │ │ │ ├── languages.ru.yml │ │ │ │ │ ├── languages.sh.yml │ │ │ │ │ ├── languages.sq.yml │ │ │ │ │ ├── languages.sr.yml │ │ │ │ │ ├── languages.sv.yml │ │ │ │ │ ├── languages.tr.yml │ │ │ │ │ ├── languages.uk.yml │ │ │ │ │ ├── languages.vi.yml │ │ │ │ │ ├── languages.zh.yml │ │ │ │ │ ├── languages.zh_TW.yml │ │ │ │ │ ├── library.ar.yml │ │ │ │ │ ├── library.az.yml │ │ │ │ │ ├── library.be.yml │ │ │ │ │ ├── library.bn.yml │ │ │ │ │ ├── library.cs.yml │ │ │ │ │ ├── library.da.yml │ │ │ │ │ ├── library.de.yml │ │ │ │ │ ├── library.de_AT.yml │ │ │ │ │ ├── library.el.yml │ │ │ │ │ ├── library.en.yml │ │ │ │ │ ├── library.en_GB.yml │ │ │ │ │ ├── library.es.yml │ │ │ │ │ ├── library.es_AR.yml │ │ │ │ │ ├── library.fa.yml │ │ │ │ │ ├── library.fa_AF.yml │ │ │ │ │ ├── library.fr.yml │ │ │ │ │ ├── library.he.yml │ │ │ │ │ ├── library.hr.yml │ │ │ │ │ ├── library.hu.yml │ │ │ │ │ ├── library.hy.yml │ │ │ │ │ ├── library.hy_AM.yml │ │ │ │ │ ├── library.id.yml │ │ │ │ │ ├── library.it.yml │ │ │ │ │ ├── library.ka.yml │ │ │ │ │ ├── library.ko.yml │ │ │ │ │ ├── library.ku.yml │ │ │ │ │ ├── library.lv.yml │ │ │ │ │ ├── library.mr.yml │ │ │ │ │ ├── library.nb_NO.yml │ │ │ │ │ ├── library.nl.yml │ │ │ │ │ ├── library.pa.yml │ │ │ │ │ ├── library.pl.yml │ │ │ │ │ ├── library.ps.yml │ │ │ │ │ ├── library.pt.yml │ │ │ │ │ ├── library.pt_BR.yml │ │ │ │ │ ├── library.ro.yml │ │ │ │ │ ├── library.ru.yml │ │ │ │ │ ├── library.sh.yml │ │ │ │ │ ├── library.sq.yml │ │ │ │ │ ├── library.sr.yml │ │ │ │ │ ├── library.sv.yml │ │ │ │ │ ├── library.tr.yml │ │ │ │ │ ├── library.uk.yml │ │ │ │ │ ├── library.vi.yml │ │ │ │ │ ├── library.zh.yml │ │ │ │ │ ├── library.zh_TW.yml │ │ │ │ │ ├── logs.ar.yml │ │ │ │ │ ├── logs.az.yml │ │ │ │ │ ├── logs.be.yml │ │ │ │ │ ├── logs.bn.yml │ │ │ │ │ ├── logs.cs.yml │ │ │ │ │ ├── logs.da.yml │ │ │ │ │ ├── logs.de.yml │ │ │ │ │ ├── logs.de_AT.yml │ │ │ │ │ ├── logs.el.yml │ │ │ │ │ ├── logs.en.yml │ │ │ │ │ ├── logs.en_GB.yml │ │ │ │ │ ├── logs.es.yml │ │ │ │ │ ├── logs.es_AR.yml │ │ │ │ │ ├── logs.fa.yml │ │ │ │ │ ├── logs.fa_AF.yml │ │ │ │ │ ├── logs.fr.yml │ │ │ │ │ ├── logs.he.yml │ │ │ │ │ ├── logs.hr.yml │ │ │ │ │ ├── logs.hu.yml │ │ │ │ │ ├── logs.hy.yml │ │ │ │ │ ├── logs.hy_AM.yml │ │ │ │ │ ├── logs.id.yml │ │ │ │ │ ├── logs.it.yml │ │ │ │ │ ├── logs.ka.yml │ │ │ │ │ ├── logs.ko.yml │ │ │ │ │ ├── logs.ku.yml │ │ │ │ │ ├── logs.lv.yml │ │ │ │ │ ├── logs.mr.yml │ │ │ │ │ ├── logs.nb_NO.yml │ │ │ │ │ ├── logs.nl.yml │ │ │ │ │ ├── logs.pa.yml │ │ │ │ │ ├── logs.pl.yml │ │ │ │ │ ├── logs.ps.yml │ │ │ │ │ ├── logs.pt.yml │ │ │ │ │ ├── logs.pt_BR.yml │ │ │ │ │ ├── logs.ro.yml │ │ │ │ │ ├── logs.ru.yml │ │ │ │ │ ├── logs.sh.yml │ │ │ │ │ ├── logs.sq.yml │ │ │ │ │ ├── logs.sr.yml │ │ │ │ │ ├── logs.sv.yml │ │ │ │ │ ├── logs.tr.yml │ │ │ │ │ ├── logs.uk.yml │ │ │ │ │ ├── logs.vi.yml │ │ │ │ │ ├── logs.zh.yml │ │ │ │ │ ├── logs.zh_TW.yml │ │ │ │ │ ├── media_archive.ar.yml │ │ │ │ │ ├── media_archive.az.yml │ │ │ │ │ ├── media_archive.be.yml │ │ │ │ │ ├── media_archive.bn.yml │ │ │ │ │ ├── media_archive.cs.yml │ │ │ │ │ ├── media_archive.da.yml │ │ │ │ │ ├── media_archive.de.yml │ │ │ │ │ ├── media_archive.de_AT.yml │ │ │ │ │ ├── media_archive.el.yml │ │ │ │ │ ├── media_archive.en.yml │ │ │ │ │ ├── media_archive.en_GB.yml │ │ │ │ │ ├── media_archive.es.yml │ │ │ │ │ ├── media_archive.es_AR.yml │ │ │ │ │ ├── media_archive.fa.yml │ │ │ │ │ ├── media_archive.fa_AF.yml │ │ │ │ │ ├── media_archive.fr.yml │ │ │ │ │ ├── media_archive.he.yml │ │ │ │ │ ├── media_archive.hr.yml │ │ │ │ │ ├── media_archive.hu.yml │ │ │ │ │ ├── media_archive.hy.yml │ │ │ │ │ ├── media_archive.hy_AM.yml │ │ │ │ │ ├── media_archive.id.yml │ │ │ │ │ ├── media_archive.it.yml │ │ │ │ │ ├── media_archive.ka.yml │ │ │ │ │ ├── media_archive.ko.yml │ │ │ │ │ ├── media_archive.ku.yml │ │ │ │ │ ├── media_archive.lv.yml │ │ │ │ │ ├── media_archive.mr.yml │ │ │ │ │ ├── media_archive.nb_NO.yml │ │ │ │ │ ├── media_archive.nl.yml │ │ │ │ │ ├── media_archive.pa.yml │ │ │ │ │ ├── media_archive.pl.yml │ │ │ │ │ ├── media_archive.ps.yml │ │ │ │ │ ├── media_archive.pt.yml │ │ │ │ │ ├── media_archive.pt_BR.yml │ │ │ │ │ ├── media_archive.ro.yml │ │ │ │ │ ├── media_archive.ru.yml │ │ │ │ │ ├── media_archive.sh.yml │ │ │ │ │ ├── media_archive.sq.yml │ │ │ │ │ ├── media_archive.sr.yml │ │ │ │ │ ├── media_archive.sv.yml │ │ │ │ │ ├── media_archive.tr.yml │ │ │ │ │ ├── media_archive.uk.yml │ │ │ │ │ ├── media_archive.vi.yml │ │ │ │ │ ├── media_archive.zh.yml │ │ │ │ │ ├── media_archive.zh_TW.yml │ │ │ │ │ ├── messages.ar.yml │ │ │ │ │ ├── messages.az.yml │ │ │ │ │ ├── messages.be.yml │ │ │ │ │ ├── messages.bn.yml │ │ │ │ │ ├── messages.cs.yml │ │ │ │ │ ├── messages.da.yml │ │ │ │ │ ├── messages.de.yml │ │ │ │ │ ├── messages.de_AT.yml │ │ │ │ │ ├── messages.el.yml │ │ │ │ │ ├── messages.en.yml │ │ │ │ │ ├── messages.en.yml~ │ │ │ │ │ ├── messages.en_GB.yml │ │ │ │ │ ├── messages.es.yml │ │ │ │ │ ├── messages.es_AR.yml │ │ │ │ │ ├── messages.fa.yml │ │ │ │ │ ├── messages.fa_AF.yml │ │ │ │ │ ├── messages.fr.yml │ │ │ │ │ ├── messages.he.yml │ │ │ │ │ ├── messages.hr.yml │ │ │ │ │ ├── messages.hu.yml │ │ │ │ │ ├── messages.hy.yml │ │ │ │ │ ├── messages.hy_AM.yml │ │ │ │ │ ├── messages.id.yml │ │ │ │ │ ├── messages.it.yml │ │ │ │ │ ├── messages.ka.yml │ │ │ │ │ ├── messages.ko.yml │ │ │ │ │ ├── messages.ku.yml │ │ │ │ │ ├── messages.lv.yml │ │ │ │ │ ├── messages.mr.yml │ │ │ │ │ ├── messages.nb_NO.yml │ │ │ │ │ ├── messages.nl.yml │ │ │ │ │ ├── messages.pa.yml │ │ │ │ │ ├── messages.pl.yml │ │ │ │ │ ├── messages.pl.yml~ │ │ │ │ │ ├── messages.ps.yml │ │ │ │ │ ├── messages.pt.yml │ │ │ │ │ ├── messages.pt_BR.yml │ │ │ │ │ ├── messages.ro.yml │ │ │ │ │ ├── messages.ru.yml │ │ │ │ │ ├── messages.sh.yml │ │ │ │ │ ├── messages.sq.yml │ │ │ │ │ ├── messages.sr.yml │ │ │ │ │ ├── messages.sv.yml │ │ │ │ │ ├── messages.tr.yml │ │ │ │ │ ├── messages.uk.yml │ │ │ │ │ ├── messages.vi.yml │ │ │ │ │ ├── messages.zh.yml │ │ │ │ │ ├── messages.zh_TW.yml │ │ │ │ │ ├── new_comments.ar.yml │ │ │ │ │ ├── new_comments.az.yml │ │ │ │ │ ├── new_comments.be.yml │ │ │ │ │ ├── new_comments.bn.yml │ │ │ │ │ ├── new_comments.cs.yml │ │ │ │ │ ├── new_comments.da.yml │ │ │ │ │ ├── new_comments.de.yml │ │ │ │ │ ├── new_comments.de_AT.yml │ │ │ │ │ ├── new_comments.el.yml │ │ │ │ │ ├── new_comments.en.yml │ │ │ │ │ ├── new_comments.en_GB.yml │ │ │ │ │ ├── new_comments.es.yml │ │ │ │ │ ├── new_comments.es_AR.yml │ │ │ │ │ ├── new_comments.fa.yml │ │ │ │ │ ├── new_comments.fa_AF.yml │ │ │ │ │ ├── new_comments.fr.yml │ │ │ │ │ ├── new_comments.he.yml │ │ │ │ │ ├── new_comments.hr.yml │ │ │ │ │ ├── new_comments.hu.yml │ │ │ │ │ ├── new_comments.hy.yml │ │ │ │ │ ├── new_comments.hy_AM.yml │ │ │ │ │ ├── new_comments.id.yml │ │ │ │ │ ├── new_comments.it.yml │ │ │ │ │ ├── new_comments.ka.yml │ │ │ │ │ ├── new_comments.ko.yml │ │ │ │ │ ├── new_comments.ku.yml │ │ │ │ │ ├── new_comments.lv.yml │ │ │ │ │ ├── new_comments.mr.yml │ │ │ │ │ ├── new_comments.nb_NO.yml │ │ │ │ │ ├── new_comments.nl.yml │ │ │ │ │ ├── new_comments.pa.yml │ │ │ │ │ ├── new_comments.pl.yml │ │ │ │ │ ├── new_comments.ps.yml │ │ │ │ │ ├── new_comments.pt.yml │ │ │ │ │ ├── new_comments.pt_BR.yml │ │ │ │ │ ├── new_comments.ro.yml │ │ │ │ │ ├── new_comments.ru.yml │ │ │ │ │ ├── new_comments.sh.yml │ │ │ │ │ ├── new_comments.sq.yml │ │ │ │ │ ├── new_comments.sr.yml │ │ │ │ │ ├── new_comments.sv.yml │ │ │ │ │ ├── new_comments.tr.yml │ │ │ │ │ ├── new_comments.uk.yml │ │ │ │ │ ├── new_comments.vi.yml │ │ │ │ │ ├── new_comments.zh.yml │ │ │ │ │ ├── new_comments.zh_TW.yml │ │ │ │ │ ├── plugins.ar.yml │ │ │ │ │ ├── plugins.az.yml │ │ │ │ │ ├── plugins.be.yml │ │ │ │ │ ├── plugins.bn.yml │ │ │ │ │ ├── plugins.cs.yml │ │ │ │ │ ├── plugins.da.yml │ │ │ │ │ ├── plugins.de.yml │ │ │ │ │ ├── plugins.de_AT.yml │ │ │ │ │ ├── plugins.el.yml │ │ │ │ │ ├── plugins.en.yml │ │ │ │ │ ├── plugins.en_GB.yml │ │ │ │ │ ├── plugins.es.yml │ │ │ │ │ ├── plugins.es_AR.yml │ │ │ │ │ ├── plugins.fa.yml │ │ │ │ │ ├── plugins.fa_AF.yml │ │ │ │ │ ├── plugins.fr.yml │ │ │ │ │ ├── plugins.he.yml │ │ │ │ │ ├── plugins.hr.yml │ │ │ │ │ ├── plugins.hu.yml │ │ │ │ │ ├── plugins.hy.yml │ │ │ │ │ ├── plugins.hy_AM.yml │ │ │ │ │ ├── plugins.id.yml │ │ │ │ │ ├── plugins.it.yml │ │ │ │ │ ├── plugins.ka.yml │ │ │ │ │ ├── plugins.ko.yml │ │ │ │ │ ├── plugins.ku.yml │ │ │ │ │ ├── plugins.lv.yml │ │ │ │ │ ├── plugins.mr.yml │ │ │ │ │ ├── plugins.nb_NO.yml │ │ │ │ │ ├── plugins.nl.yml │ │ │ │ │ ├── plugins.pa.yml │ │ │ │ │ ├── plugins.pl.yml │ │ │ │ │ ├── plugins.ps.yml │ │ │ │ │ ├── plugins.pt.yml │ │ │ │ │ ├── plugins.pt_BR.yml │ │ │ │ │ ├── plugins.ro.yml │ │ │ │ │ ├── plugins.ru.yml │ │ │ │ │ ├── plugins.sh.yml │ │ │ │ │ ├── plugins.sq.yml │ │ │ │ │ ├── plugins.sr.yml │ │ │ │ │ ├── plugins.sv.yml │ │ │ │ │ ├── plugins.tr.yml │ │ │ │ │ ├── plugins.uk.yml │ │ │ │ │ ├── plugins.vi.yml │ │ │ │ │ ├── plugins.zh.yml │ │ │ │ │ ├── plugins.zh_TW.yml │ │ │ │ │ ├── plugins_manager.ar.yml │ │ │ │ │ ├── plugins_manager.az.yml │ │ │ │ │ ├── plugins_manager.be.yml │ │ │ │ │ ├── plugins_manager.bn.yml │ │ │ │ │ ├── plugins_manager.cs.yml │ │ │ │ │ ├── plugins_manager.da.yml │ │ │ │ │ ├── plugins_manager.de.yml │ │ │ │ │ ├── plugins_manager.de_AT.yml │ │ │ │ │ ├── plugins_manager.el.yml │ │ │ │ │ ├── plugins_manager.en.yml │ │ │ │ │ ├── plugins_manager.en_GB.yml │ │ │ │ │ ├── plugins_manager.es.yml │ │ │ │ │ ├── plugins_manager.es_AR.yml │ │ │ │ │ ├── plugins_manager.fa.yml │ │ │ │ │ ├── plugins_manager.fa_AF.yml │ │ │ │ │ ├── plugins_manager.fr.yml │ │ │ │ │ ├── plugins_manager.he.yml │ │ │ │ │ ├── plugins_manager.hr.yml │ │ │ │ │ ├── plugins_manager.hu.yml │ │ │ │ │ ├── plugins_manager.hy.yml │ │ │ │ │ ├── plugins_manager.hy_AM.yml │ │ │ │ │ ├── plugins_manager.id.yml │ │ │ │ │ ├── plugins_manager.it.yml │ │ │ │ │ ├── plugins_manager.ka.yml │ │ │ │ │ ├── plugins_manager.ko.yml │ │ │ │ │ ├── plugins_manager.ku.yml │ │ │ │ │ ├── plugins_manager.lv.yml │ │ │ │ │ ├── plugins_manager.mr.yml │ │ │ │ │ ├── plugins_manager.nb_NO.yml │ │ │ │ │ ├── plugins_manager.nl.yml │ │ │ │ │ ├── plugins_manager.pa.yml │ │ │ │ │ ├── plugins_manager.pl.yml │ │ │ │ │ ├── plugins_manager.ps.yml │ │ │ │ │ ├── plugins_manager.pt.yml │ │ │ │ │ ├── plugins_manager.pt_BR.yml │ │ │ │ │ ├── plugins_manager.ro.yml │ │ │ │ │ ├── plugins_manager.ru.yml │ │ │ │ │ ├── plugins_manager.sh.yml │ │ │ │ │ ├── plugins_manager.sq.yml │ │ │ │ │ ├── plugins_manager.sr.yml │ │ │ │ │ ├── plugins_manager.sv.yml │ │ │ │ │ ├── plugins_manager.tr.yml │ │ │ │ │ ├── plugins_manager.uk.yml │ │ │ │ │ ├── plugins_manager.vi.yml │ │ │ │ │ ├── plugins_manager.zh.yml │ │ │ │ │ ├── plugins_manager.zh_TW.yml │ │ │ │ │ ├── preview.ar.yml │ │ │ │ │ ├── preview.az.yml │ │ │ │ │ ├── preview.be.yml │ │ │ │ │ ├── preview.bn.yml │ │ │ │ │ ├── preview.cs.yml │ │ │ │ │ ├── preview.da.yml │ │ │ │ │ ├── preview.de.yml │ │ │ │ │ ├── preview.de_AT.yml │ │ │ │ │ ├── preview.el.yml │ │ │ │ │ ├── preview.en.yml │ │ │ │ │ ├── preview.en_GB.yml │ │ │ │ │ ├── preview.es.yml │ │ │ │ │ ├── preview.es_AR.yml │ │ │ │ │ ├── preview.fa.yml │ │ │ │ │ ├── preview.fa_AF.yml │ │ │ │ │ ├── preview.fr.yml │ │ │ │ │ ├── preview.he.yml │ │ │ │ │ ├── preview.hr.yml │ │ │ │ │ ├── preview.hu.yml │ │ │ │ │ ├── preview.hy.yml │ │ │ │ │ ├── preview.hy_AM.yml │ │ │ │ │ ├── preview.id.yml │ │ │ │ │ ├── preview.it.yml │ │ │ │ │ ├── preview.ka.yml │ │ │ │ │ ├── preview.ko.yml │ │ │ │ │ ├── preview.ku.yml │ │ │ │ │ ├── preview.lv.yml │ │ │ │ │ ├── preview.mr.yml │ │ │ │ │ ├── preview.nb_NO.yml │ │ │ │ │ ├── preview.nl.yml │ │ │ │ │ ├── preview.pa.yml │ │ │ │ │ ├── preview.pl.yml │ │ │ │ │ ├── preview.ps.yml │ │ │ │ │ ├── preview.pt.yml │ │ │ │ │ ├── preview.pt_BR.yml │ │ │ │ │ ├── preview.ro.yml │ │ │ │ │ ├── preview.ru.yml │ │ │ │ │ ├── preview.sh.yml │ │ │ │ │ ├── preview.sq.yml │ │ │ │ │ ├── preview.sr.yml │ │ │ │ │ ├── preview.sv.yml │ │ │ │ │ ├── preview.tr.yml │ │ │ │ │ ├── preview.uk.yml │ │ │ │ │ ├── preview.vi.yml │ │ │ │ │ ├── preview.zh.yml │ │ │ │ │ ├── preview.zh_TW.yml │ │ │ │ │ ├── pub.ar.yml │ │ │ │ │ ├── pub.az.yml │ │ │ │ │ ├── pub.be.yml │ │ │ │ │ ├── pub.bn.yml │ │ │ │ │ ├── pub.cs.yml │ │ │ │ │ ├── pub.da.yml │ │ │ │ │ ├── pub.de.yml │ │ │ │ │ ├── pub.de_AT.yml │ │ │ │ │ ├── pub.el.yml │ │ │ │ │ ├── pub.en.yml │ │ │ │ │ ├── pub.en_GB.yml │ │ │ │ │ ├── pub.es.yml │ │ │ │ │ ├── pub.es_AR.yml │ │ │ │ │ ├── pub.fa.yml │ │ │ │ │ ├── pub.fa_AF.yml │ │ │ │ │ ├── pub.fr.yml │ │ │ │ │ ├── pub.he.yml │ │ │ │ │ ├── pub.hr.yml │ │ │ │ │ ├── pub.hu.yml │ │ │ │ │ ├── pub.hy.yml │ │ │ │ │ ├── pub.hy_AM.yml │ │ │ │ │ ├── pub.id.yml │ │ │ │ │ ├── pub.it.yml │ │ │ │ │ ├── pub.ka.yml │ │ │ │ │ ├── pub.ko.yml │ │ │ │ │ ├── pub.ku.yml │ │ │ │ │ ├── pub.lv.yml │ │ │ │ │ ├── pub.mr.yml │ │ │ │ │ ├── pub.nb_NO.yml │ │ │ │ │ ├── pub.nl.yml │ │ │ │ │ ├── pub.pa.yml │ │ │ │ │ ├── pub.pl.yml │ │ │ │ │ ├── pub.ps.yml │ │ │ │ │ ├── pub.pt.yml │ │ │ │ │ ├── pub.pt_BR.yml │ │ │ │ │ ├── pub.ro.yml │ │ │ │ │ ├── pub.ru.yml │ │ │ │ │ ├── pub.sh.yml │ │ │ │ │ ├── pub.sq.yml │ │ │ │ │ ├── pub.sr.yml │ │ │ │ │ ├── pub.sv.yml │ │ │ │ │ ├── pub.tr.yml │ │ │ │ │ ├── pub.uk.yml │ │ │ │ │ ├── pub.vi.yml │ │ │ │ │ ├── pub.zh.yml │ │ │ │ │ ├── pub.zh_TW.yml │ │ │ │ │ ├── sections.ar.yml │ │ │ │ │ ├── sections.az.yml │ │ │ │ │ ├── sections.be.yml │ │ │ │ │ ├── sections.bn.yml │ │ │ │ │ ├── sections.cs.yml │ │ │ │ │ ├── sections.da.yml │ │ │ │ │ ├── sections.de.yml │ │ │ │ │ ├── sections.de_AT.yml │ │ │ │ │ ├── sections.el.yml │ │ │ │ │ ├── sections.en.yml │ │ │ │ │ ├── sections.en_GB.yml │ │ │ │ │ ├── sections.es.yml │ │ │ │ │ ├── sections.es_AR.yml │ │ │ │ │ ├── sections.fa.yml │ │ │ │ │ ├── sections.fa_AF.yml │ │ │ │ │ ├── sections.fr.yml │ │ │ │ │ ├── sections.he.yml │ │ │ │ │ ├── sections.hr.yml │ │ │ │ │ ├── sections.hu.yml │ │ │ │ │ ├── sections.hy.yml │ │ │ │ │ ├── sections.hy_AM.yml │ │ │ │ │ ├── sections.id.yml │ │ │ │ │ ├── sections.it.yml │ │ │ │ │ ├── sections.ka.yml │ │ │ │ │ ├── sections.ko.yml │ │ │ │ │ ├── sections.ku.yml │ │ │ │ │ ├── sections.lv.yml │ │ │ │ │ ├── sections.mr.yml │ │ │ │ │ ├── sections.nb_NO.yml │ │ │ │ │ ├── sections.nl.yml │ │ │ │ │ ├── sections.pa.yml │ │ │ │ │ ├── sections.pl.yml │ │ │ │ │ ├── sections.ps.yml │ │ │ │ │ ├── sections.pt.yml │ │ │ │ │ ├── sections.pt_BR.yml │ │ │ │ │ ├── sections.ro.yml │ │ │ │ │ ├── sections.ru.yml │ │ │ │ │ ├── sections.sh.yml │ │ │ │ │ ├── sections.sq.yml │ │ │ │ │ ├── sections.sr.yml │ │ │ │ │ ├── sections.sv.yml │ │ │ │ │ ├── sections.tr.yml │ │ │ │ │ ├── sections.uk.yml │ │ │ │ │ ├── sections.vi.yml │ │ │ │ │ ├── sections.zh.yml │ │ │ │ │ ├── sections.zh_TW.yml │ │ │ │ │ ├── support.ar.yml │ │ │ │ │ ├── support.az.yml │ │ │ │ │ ├── support.be.yml │ │ │ │ │ ├── support.bn.yml │ │ │ │ │ ├── support.cs.yml │ │ │ │ │ ├── support.da.yml │ │ │ │ │ ├── support.de.yml │ │ │ │ │ ├── support.de_AT.yml │ │ │ │ │ ├── support.el.yml │ │ │ │ │ ├── support.en.yml │ │ │ │ │ ├── support.en_GB.yml │ │ │ │ │ ├── support.es.yml │ │ │ │ │ ├── support.es_AR.yml │ │ │ │ │ ├── support.fa.yml │ │ │ │ │ ├── support.fa_AF.yml │ │ │ │ │ ├── support.fr.yml │ │ │ │ │ ├── support.he.yml │ │ │ │ │ ├── support.hr.yml │ │ │ │ │ ├── support.hu.yml │ │ │ │ │ ├── support.hy.yml │ │ │ │ │ ├── support.hy_AM.yml │ │ │ │ │ ├── support.id.yml │ │ │ │ │ ├── support.it.yml │ │ │ │ │ ├── support.ka.yml │ │ │ │ │ ├── support.ko.yml │ │ │ │ │ ├── support.ku.yml │ │ │ │ │ ├── support.lv.yml │ │ │ │ │ ├── support.mr.yml │ │ │ │ │ ├── support.nb_NO.yml │ │ │ │ │ ├── support.nl.yml │ │ │ │ │ ├── support.pa.yml │ │ │ │ │ ├── support.pl.yml │ │ │ │ │ ├── support.ps.yml │ │ │ │ │ ├── support.pt.yml │ │ │ │ │ ├── support.pt_BR.yml │ │ │ │ │ ├── support.ro.yml │ │ │ │ │ ├── support.ru.yml │ │ │ │ │ ├── support.sh.yml │ │ │ │ │ ├── support.sq.yml │ │ │ │ │ ├── support.sr.yml │ │ │ │ │ ├── support.sv.yml │ │ │ │ │ ├── support.tr.yml │ │ │ │ │ ├── support.uk.yml │ │ │ │ │ ├── support.vi.yml │ │ │ │ │ ├── support.zh.yml │ │ │ │ │ ├── support.zh_TW.yml │ │ │ │ │ ├── system_pref.ar.yml │ │ │ │ │ ├── system_pref.az.yml │ │ │ │ │ ├── system_pref.be.yml │ │ │ │ │ ├── system_pref.bn.yml │ │ │ │ │ ├── system_pref.cs.yml │ │ │ │ │ ├── system_pref.da.yml │ │ │ │ │ ├── system_pref.de.yml │ │ │ │ │ ├── system_pref.de_AT.yml │ │ │ │ │ ├── system_pref.el.yml │ │ │ │ │ ├── system_pref.en.yml │ │ │ │ │ ├── system_pref.en_GB.yml │ │ │ │ │ ├── system_pref.es.yml │ │ │ │ │ ├── system_pref.es_AR.yml │ │ │ │ │ ├── system_pref.fa.yml │ │ │ │ │ ├── system_pref.fa_AF.yml │ │ │ │ │ ├── system_pref.fr.yml │ │ │ │ │ ├── system_pref.he.yml │ │ │ │ │ ├── system_pref.hr.yml │ │ │ │ │ ├── system_pref.hu.yml │ │ │ │ │ ├── system_pref.hy.yml │ │ │ │ │ ├── system_pref.hy_AM.yml │ │ │ │ │ ├── system_pref.id.yml │ │ │ │ │ ├── system_pref.it.yml │ │ │ │ │ ├── system_pref.ka.yml │ │ │ │ │ ├── system_pref.ko.yml │ │ │ │ │ ├── system_pref.ku.yml │ │ │ │ │ ├── system_pref.lv.yml │ │ │ │ │ ├── system_pref.mr.yml │ │ │ │ │ ├── system_pref.nb_NO.yml │ │ │ │ │ ├── system_pref.nl.yml │ │ │ │ │ ├── system_pref.pa.yml │ │ │ │ │ ├── system_pref.pl.yml │ │ │ │ │ ├── system_pref.ps.yml │ │ │ │ │ ├── system_pref.pt.yml │ │ │ │ │ ├── system_pref.pt_BR.yml │ │ │ │ │ ├── system_pref.ro.yml │ │ │ │ │ ├── system_pref.ru.yml │ │ │ │ │ ├── system_pref.sh.yml │ │ │ │ │ ├── system_pref.sq.yml │ │ │ │ │ ├── system_pref.sr.yml │ │ │ │ │ ├── system_pref.sv.yml │ │ │ │ │ ├── system_pref.tr.yml │ │ │ │ │ ├── system_pref.uk.yml │ │ │ │ │ ├── system_pref.vi.yml │ │ │ │ │ ├── system_pref.zh.yml │ │ │ │ │ ├── system_pref.zh_TW.yml │ │ │ │ │ ├── themes.ar.yml │ │ │ │ │ ├── themes.az.yml │ │ │ │ │ ├── themes.be.yml │ │ │ │ │ ├── themes.bn.yml │ │ │ │ │ ├── themes.cs.yml │ │ │ │ │ ├── themes.da.yml │ │ │ │ │ ├── themes.de.yml │ │ │ │ │ ├── themes.de_AT.yml │ │ │ │ │ ├── themes.el.yml │ │ │ │ │ ├── themes.en.yml │ │ │ │ │ ├── themes.en_GB.yml │ │ │ │ │ ├── themes.es.yml │ │ │ │ │ ├── themes.es_AR.yml │ │ │ │ │ ├── themes.fa.yml │ │ │ │ │ ├── themes.fa_AF.yml │ │ │ │ │ ├── themes.fr.yml │ │ │ │ │ ├── themes.he.yml │ │ │ │ │ ├── themes.hr.yml │ │ │ │ │ ├── themes.hu.yml │ │ │ │ │ ├── themes.hy.yml │ │ │ │ │ ├── themes.hy_AM.yml │ │ │ │ │ ├── themes.id.yml │ │ │ │ │ ├── themes.it.yml │ │ │ │ │ ├── themes.ka.yml │ │ │ │ │ ├── themes.ko.yml │ │ │ │ │ ├── themes.ku.yml │ │ │ │ │ ├── themes.lv.yml │ │ │ │ │ ├── themes.mr.yml │ │ │ │ │ ├── themes.nb_NO.yml │ │ │ │ │ ├── themes.nl.yml │ │ │ │ │ ├── themes.pa.yml │ │ │ │ │ ├── themes.pl.yml │ │ │ │ │ ├── themes.ps.yml │ │ │ │ │ ├── themes.pt.yml │ │ │ │ │ ├── themes.pt_BR.yml │ │ │ │ │ ├── themes.ro.yml │ │ │ │ │ ├── themes.ru.yml │ │ │ │ │ ├── themes.sh.yml │ │ │ │ │ ├── themes.sq.yml │ │ │ │ │ ├── themes.sr.yml │ │ │ │ │ ├── themes.sv.yml │ │ │ │ │ ├── themes.tr.yml │ │ │ │ │ ├── themes.uk.yml │ │ │ │ │ ├── themes.vi.yml │ │ │ │ │ ├── themes.zh.yml │ │ │ │ │ ├── themes.zh_TW.yml │ │ │ │ │ ├── tiny_media_plugin.ar.yml │ │ │ │ │ ├── tiny_media_plugin.az.yml │ │ │ │ │ ├── tiny_media_plugin.be.yml │ │ │ │ │ ├── tiny_media_plugin.bn.yml │ │ │ │ │ ├── tiny_media_plugin.cs.yml │ │ │ │ │ ├── tiny_media_plugin.da.yml │ │ │ │ │ ├── tiny_media_plugin.de.yml │ │ │ │ │ ├── tiny_media_plugin.de_AT.yml │ │ │ │ │ ├── tiny_media_plugin.el.yml │ │ │ │ │ ├── tiny_media_plugin.en.yml │ │ │ │ │ ├── tiny_media_plugin.en_GB.yml │ │ │ │ │ ├── tiny_media_plugin.es.yml │ │ │ │ │ ├── tiny_media_plugin.es_AR.yml │ │ │ │ │ ├── tiny_media_plugin.fa.yml │ │ │ │ │ ├── tiny_media_plugin.fa_AF.yml │ │ │ │ │ ├── tiny_media_plugin.fr.yml │ │ │ │ │ ├── tiny_media_plugin.he.yml │ │ │ │ │ ├── tiny_media_plugin.hr.yml │ │ │ │ │ ├── tiny_media_plugin.hu.yml │ │ │ │ │ ├── tiny_media_plugin.hy.yml │ │ │ │ │ ├── tiny_media_plugin.hy_AM.yml │ │ │ │ │ ├── tiny_media_plugin.id.yml │ │ │ │ │ ├── tiny_media_plugin.it.yml │ │ │ │ │ ├── tiny_media_plugin.ka.yml │ │ │ │ │ ├── tiny_media_plugin.ko.yml │ │ │ │ │ ├── tiny_media_plugin.ku.yml │ │ │ │ │ ├── tiny_media_plugin.lv.yml │ │ │ │ │ ├── tiny_media_plugin.mr.yml │ │ │ │ │ ├── tiny_media_plugin.nb_NO.yml │ │ │ │ │ ├── tiny_media_plugin.nl.yml │ │ │ │ │ ├── tiny_media_plugin.pa.yml │ │ │ │ │ ├── tiny_media_plugin.pl.yml │ │ │ │ │ ├── tiny_media_plugin.ps.yml │ │ │ │ │ ├── tiny_media_plugin.pt.yml │ │ │ │ │ ├── tiny_media_plugin.pt_BR.yml │ │ │ │ │ ├── tiny_media_plugin.ro.yml │ │ │ │ │ ├── tiny_media_plugin.ru.yml │ │ │ │ │ ├── tiny_media_plugin.sh.yml │ │ │ │ │ ├── tiny_media_plugin.sq.yml │ │ │ │ │ ├── tiny_media_plugin.sr.yml │ │ │ │ │ ├── tiny_media_plugin.sv.yml │ │ │ │ │ ├── tiny_media_plugin.tr.yml │ │ │ │ │ ├── tiny_media_plugin.uk.yml │ │ │ │ │ ├── tiny_media_plugin.vi.yml │ │ │ │ │ ├── tiny_media_plugin.zh.yml │ │ │ │ │ ├── tiny_media_plugin.zh_TW.yml │ │ │ │ │ ├── topics.ar.yml │ │ │ │ │ ├── topics.az.yml │ │ │ │ │ ├── topics.be.yml │ │ │ │ │ ├── topics.bn.yml │ │ │ │ │ ├── topics.cs.yml │ │ │ │ │ ├── topics.da.yml │ │ │ │ │ ├── topics.de.yml │ │ │ │ │ ├── topics.de_AT.yml │ │ │ │ │ ├── topics.el.yml │ │ │ │ │ ├── topics.en.yml │ │ │ │ │ ├── topics.en_GB.yml │ │ │ │ │ ├── topics.es.yml │ │ │ │ │ ├── topics.es_AR.yml │ │ │ │ │ ├── topics.fa.yml │ │ │ │ │ ├── topics.fa_AF.yml │ │ │ │ │ ├── topics.fr.yml │ │ │ │ │ ├── topics.he.yml │ │ │ │ │ ├── topics.hr.yml │ │ │ │ │ ├── topics.hu.yml │ │ │ │ │ ├── topics.hy.yml │ │ │ │ │ ├── topics.hy_AM.yml │ │ │ │ │ ├── topics.id.yml │ │ │ │ │ ├── topics.it.yml │ │ │ │ │ ├── topics.ka.yml │ │ │ │ │ ├── topics.ko.yml │ │ │ │ │ ├── topics.ku.yml │ │ │ │ │ ├── topics.lv.yml │ │ │ │ │ ├── topics.mr.yml │ │ │ │ │ ├── topics.nb_NO.yml │ │ │ │ │ ├── topics.nl.yml │ │ │ │ │ ├── topics.pa.yml │ │ │ │ │ ├── topics.pl.yml │ │ │ │ │ ├── topics.ps.yml │ │ │ │ │ ├── topics.pt.yml │ │ │ │ │ ├── topics.pt_BR.yml │ │ │ │ │ ├── topics.ro.yml │ │ │ │ │ ├── topics.ru.yml │ │ │ │ │ ├── topics.sh.yml │ │ │ │ │ ├── topics.sq.yml │ │ │ │ │ ├── topics.sr.yml │ │ │ │ │ ├── topics.sv.yml │ │ │ │ │ ├── topics.tr.yml │ │ │ │ │ ├── topics.uk.yml │ │ │ │ │ ├── topics.vi.yml │ │ │ │ │ ├── topics.zh.yml │ │ │ │ │ ├── topics.zh_TW.yml │ │ │ │ │ ├── user_subscription_sections.ar.yml │ │ │ │ │ ├── user_subscription_sections.az.yml │ │ │ │ │ ├── user_subscription_sections.be.yml │ │ │ │ │ ├── user_subscription_sections.bn.yml │ │ │ │ │ ├── user_subscription_sections.cs.yml │ │ │ │ │ ├── user_subscription_sections.da.yml │ │ │ │ │ ├── user_subscription_sections.de.yml │ │ │ │ │ ├── user_subscription_sections.de_AT.yml │ │ │ │ │ ├── user_subscription_sections.el.yml │ │ │ │ │ ├── user_subscription_sections.en.yml │ │ │ │ │ ├── user_subscription_sections.en_GB.yml │ │ │ │ │ ├── user_subscription_sections.es.yml │ │ │ │ │ ├── user_subscription_sections.es_AR.yml │ │ │ │ │ ├── user_subscription_sections.fa.yml │ │ │ │ │ ├── user_subscription_sections.fa_AF.yml │ │ │ │ │ ├── user_subscription_sections.fr.yml │ │ │ │ │ ├── user_subscription_sections.he.yml │ │ │ │ │ ├── user_subscription_sections.hr.yml │ │ │ │ │ ├── user_subscription_sections.hu.yml │ │ │ │ │ ├── user_subscription_sections.hy.yml │ │ │ │ │ ├── user_subscription_sections.hy_AM.yml │ │ │ │ │ ├── user_subscription_sections.id.yml │ │ │ │ │ ├── user_subscription_sections.it.yml │ │ │ │ │ ├── user_subscription_sections.ka.yml │ │ │ │ │ ├── user_subscription_sections.ko.yml │ │ │ │ │ ├── user_subscription_sections.ku.yml │ │ │ │ │ ├── user_subscription_sections.lv.yml │ │ │ │ │ ├── user_subscription_sections.mr.yml │ │ │ │ │ ├── user_subscription_sections.nb_NO.yml │ │ │ │ │ ├── user_subscription_sections.nl.yml │ │ │ │ │ ├── user_subscription_sections.pa.yml │ │ │ │ │ ├── user_subscription_sections.pl.yml │ │ │ │ │ ├── user_subscription_sections.ps.yml │ │ │ │ │ ├── user_subscription_sections.pt.yml │ │ │ │ │ ├── user_subscription_sections.pt_BR.yml │ │ │ │ │ ├── user_subscription_sections.ro.yml │ │ │ │ │ ├── user_subscription_sections.ru.yml │ │ │ │ │ ├── user_subscription_sections.sh.yml │ │ │ │ │ ├── user_subscription_sections.sq.yml │ │ │ │ │ ├── user_subscription_sections.sr.yml │ │ │ │ │ ├── user_subscription_sections.sv.yml │ │ │ │ │ ├── user_subscription_sections.tr.yml │ │ │ │ │ ├── user_subscription_sections.uk.yml │ │ │ │ │ ├── user_subscription_sections.vi.yml │ │ │ │ │ ├── user_subscription_sections.zh.yml │ │ │ │ │ ├── user_subscription_sections.zh_TW.yml │ │ │ │ │ ├── user_subscriptions.ar.yml │ │ │ │ │ ├── user_subscriptions.az.yml │ │ │ │ │ ├── user_subscriptions.be.yml │ │ │ │ │ ├── user_subscriptions.bn.yml │ │ │ │ │ ├── user_subscriptions.cs.yml │ │ │ │ │ ├── user_subscriptions.da.yml │ │ │ │ │ ├── user_subscriptions.de.yml │ │ │ │ │ ├── user_subscriptions.de_AT.yml │ │ │ │ │ ├── user_subscriptions.el.yml │ │ │ │ │ ├── user_subscriptions.en.yml │ │ │ │ │ ├── user_subscriptions.en_GB.yml │ │ │ │ │ ├── user_subscriptions.es.yml │ │ │ │ │ ├── user_subscriptions.es_AR.yml │ │ │ │ │ ├── user_subscriptions.fa.yml │ │ │ │ │ ├── user_subscriptions.fa_AF.yml │ │ │ │ │ ├── user_subscriptions.fr.yml │ │ │ │ │ ├── user_subscriptions.he.yml │ │ │ │ │ ├── user_subscriptions.hr.yml │ │ │ │ │ ├── user_subscriptions.hu.yml │ │ │ │ │ ├── user_subscriptions.hy.yml │ │ │ │ │ ├── user_subscriptions.hy_AM.yml │ │ │ │ │ ├── user_subscriptions.id.yml │ │ │ │ │ ├── user_subscriptions.it.yml │ │ │ │ │ ├── user_subscriptions.ka.yml │ │ │ │ │ ├── user_subscriptions.ko.yml │ │ │ │ │ ├── user_subscriptions.ku.yml │ │ │ │ │ ├── user_subscriptions.lv.yml │ │ │ │ │ ├── user_subscriptions.mr.yml │ │ │ │ │ ├── user_subscriptions.nb_NO.yml │ │ │ │ │ ├── user_subscriptions.nl.yml │ │ │ │ │ ├── user_subscriptions.pa.yml │ │ │ │ │ ├── user_subscriptions.pl.yml │ │ │ │ │ ├── user_subscriptions.ps.yml │ │ │ │ │ ├── user_subscriptions.pt.yml │ │ │ │ │ ├── user_subscriptions.pt_BR.yml │ │ │ │ │ ├── user_subscriptions.ro.yml │ │ │ │ │ ├── user_subscriptions.ru.yml │ │ │ │ │ ├── user_subscriptions.sh.yml │ │ │ │ │ ├── user_subscriptions.sq.yml │ │ │ │ │ ├── user_subscriptions.sr.yml │ │ │ │ │ ├── user_subscriptions.sv.yml │ │ │ │ │ ├── user_subscriptions.tr.yml │ │ │ │ │ ├── user_subscriptions.uk.yml │ │ │ │ │ ├── user_subscriptions.vi.yml │ │ │ │ │ ├── user_subscriptions.zh.yml │ │ │ │ │ ├── user_subscriptions.zh_TW.yml │ │ │ │ │ ├── user_types.ar.yml │ │ │ │ │ ├── user_types.az.yml │ │ │ │ │ ├── user_types.be.yml │ │ │ │ │ ├── user_types.bn.yml │ │ │ │ │ ├── user_types.cs.yml │ │ │ │ │ ├── user_types.da.yml │ │ │ │ │ ├── user_types.de.yml │ │ │ │ │ ├── user_types.de_AT.yml │ │ │ │ │ ├── user_types.el.yml │ │ │ │ │ ├── user_types.en.yml │ │ │ │ │ ├── user_types.en_GB.yml │ │ │ │ │ ├── user_types.es.yml │ │ │ │ │ ├── user_types.es_AR.yml │ │ │ │ │ ├── user_types.fa.yml │ │ │ │ │ ├── user_types.fa_AF.yml │ │ │ │ │ ├── user_types.fr.yml │ │ │ │ │ ├── user_types.he.yml │ │ │ │ │ ├── user_types.hr.yml │ │ │ │ │ ├── user_types.hu.yml │ │ │ │ │ ├── user_types.hy.yml │ │ │ │ │ ├── user_types.hy_AM.yml │ │ │ │ │ ├── user_types.id.yml │ │ │ │ │ ├── user_types.it.yml │ │ │ │ │ ├── user_types.ka.yml │ │ │ │ │ ├── user_types.ko.yml │ │ │ │ │ ├── user_types.ku.yml │ │ │ │ │ ├── user_types.lv.yml │ │ │ │ │ ├── user_types.mr.yml │ │ │ │ │ ├── user_types.nb_NO.yml │ │ │ │ │ ├── user_types.nl.yml │ │ │ │ │ ├── user_types.pa.yml │ │ │ │ │ ├── user_types.pl.yml │ │ │ │ │ ├── user_types.ps.yml │ │ │ │ │ ├── user_types.pt.yml │ │ │ │ │ ├── user_types.pt_BR.yml │ │ │ │ │ ├── user_types.ro.yml │ │ │ │ │ ├── user_types.ru.yml │ │ │ │ │ ├── user_types.sh.yml │ │ │ │ │ ├── user_types.sq.yml │ │ │ │ │ ├── user_types.sr.yml │ │ │ │ │ ├── user_types.sv.yml │ │ │ │ │ ├── user_types.tr.yml │ │ │ │ │ ├── user_types.uk.yml │ │ │ │ │ ├── user_types.vi.yml │ │ │ │ │ ├── user_types.zh.yml │ │ │ │ │ ├── user_types.zh_TW.yml │ │ │ │ │ ├── users.ar.yml │ │ │ │ │ ├── users.az.yml │ │ │ │ │ ├── users.be.yml │ │ │ │ │ ├── users.bn.yml │ │ │ │ │ ├── users.cs.yml │ │ │ │ │ ├── users.da.yml │ │ │ │ │ ├── users.de.yml │ │ │ │ │ ├── users.de_AT.yml │ │ │ │ │ ├── users.el.yml │ │ │ │ │ ├── users.en.yml │ │ │ │ │ ├── users.en_GB.yml │ │ │ │ │ ├── users.es.yml │ │ │ │ │ ├── users.es_AR.yml │ │ │ │ │ ├── users.fa.yml │ │ │ │ │ ├── users.fa_AF.yml │ │ │ │ │ ├── users.fr.yml │ │ │ │ │ ├── users.he.yml │ │ │ │ │ ├── users.hr.yml │ │ │ │ │ ├── users.hu.yml │ │ │ │ │ ├── users.hy.yml │ │ │ │ │ ├── users.hy_AM.yml │ │ │ │ │ ├── users.id.yml │ │ │ │ │ ├── users.it.yml │ │ │ │ │ ├── users.ka.yml │ │ │ │ │ ├── users.ko.yml │ │ │ │ │ ├── users.ku.yml │ │ │ │ │ ├── users.lv.yml │ │ │ │ │ ├── users.mr.yml │ │ │ │ │ ├── users.nb_NO.yml │ │ │ │ │ ├── users.nl.yml │ │ │ │ │ ├── users.pa.yml │ │ │ │ │ ├── users.pl.yml │ │ │ │ │ ├── users.ps.yml │ │ │ │ │ ├── users.pt.yml │ │ │ │ │ ├── users.pt_BR.yml │ │ │ │ │ ├── users.ro.yml │ │ │ │ │ ├── users.ru.yml │ │ │ │ │ ├── users.sh.yml │ │ │ │ │ ├── users.sq.yml │ │ │ │ │ ├── users.sr.yml │ │ │ │ │ ├── users.sv.yml │ │ │ │ │ ├── users.tr.yml │ │ │ │ │ ├── users.uk.yml │ │ │ │ │ ├── users.vi.yml │ │ │ │ │ ├── users.zh.yml │ │ │ │ │ ├── users.zh_TW.yml │ │ │ │ │ ├── validators.ar.yml │ │ │ │ │ ├── validators.az.yml │ │ │ │ │ ├── validators.be.yml │ │ │ │ │ ├── validators.bn.yml │ │ │ │ │ ├── validators.cs.yml │ │ │ │ │ ├── validators.da.yml │ │ │ │ │ ├── validators.de.yml │ │ │ │ │ ├── validators.de_AT.yml │ │ │ │ │ ├── validators.el.yml │ │ │ │ │ ├── validators.en.yml │ │ │ │ │ ├── validators.en_GB.yml │ │ │ │ │ ├── validators.es.yml │ │ │ │ │ ├── validators.es_AR.yml │ │ │ │ │ ├── validators.fa.yml │ │ │ │ │ ├── validators.fa_AF.yml │ │ │ │ │ ├── validators.fr.yml │ │ │ │ │ ├── validators.he.yml │ │ │ │ │ ├── validators.hr.yml │ │ │ │ │ ├── validators.hu.yml │ │ │ │ │ ├── validators.hy.yml │ │ │ │ │ ├── validators.hy_AM.yml │ │ │ │ │ ├── validators.id.yml │ │ │ │ │ ├── validators.it.yml │ │ │ │ │ ├── validators.ka.yml │ │ │ │ │ ├── validators.ko.yml │ │ │ │ │ ├── validators.ku.yml │ │ │ │ │ ├── validators.lv.yml │ │ │ │ │ ├── validators.mr.yml │ │ │ │ │ ├── validators.nb_NO.yml │ │ │ │ │ ├── validators.nl.yml │ │ │ │ │ ├── validators.pa.yml │ │ │ │ │ ├── validators.pl.yml │ │ │ │ │ ├── validators.ps.yml │ │ │ │ │ ├── validators.pt.yml │ │ │ │ │ ├── validators.pt_BR.yml │ │ │ │ │ ├── validators.ro.yml │ │ │ │ │ ├── validators.ru.yml │ │ │ │ │ ├── validators.sh.yml │ │ │ │ │ ├── validators.sq.yml │ │ │ │ │ ├── validators.sr.yml │ │ │ │ │ ├── validators.sv.yml │ │ │ │ │ ├── validators.tr.yml │ │ │ │ │ ├── validators.uk.yml │ │ │ │ │ ├── validators.vi.yml │ │ │ │ │ ├── validators.zh.yml │ │ │ │ │ └── validators.zh_TW.yml │ │ │ │ └── views/ │ │ │ │ ├── BackendArticleImages/ │ │ │ │ │ └── edit.html.twig │ │ │ │ ├── BackendJournalistDashboard/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── BackendPublications/ │ │ │ │ │ ├── edit.html.twig │ │ │ │ │ ├── index.html.twig │ │ │ │ │ └── remove.html.twig │ │ │ │ ├── Comments/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── Exception/ │ │ │ │ │ └── exception.html.twig │ │ │ │ ├── Images/ │ │ │ │ │ ├── createFilter.html.twig │ │ │ │ │ └── filterOptions.html.twig │ │ │ │ ├── Menu/ │ │ │ │ │ └── knp_menu.html.twig │ │ │ │ ├── Pagination/ │ │ │ │ │ └── pagination_bootstrap3.html.twig │ │ │ │ ├── PasswordRecovery/ │ │ │ │ │ ├── check.html.twig │ │ │ │ │ ├── email.txt.twig │ │ │ │ │ └── index.html.twig │ │ │ │ ├── Playlists/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── Plugins/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── Security/ │ │ │ │ │ └── login.html.twig │ │ │ │ ├── SystemPref/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── Topics/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── Users/ │ │ │ │ │ └── index.html.twig │ │ │ │ ├── admin_layout.html.twig │ │ │ │ ├── admin_menu.html.twig │ │ │ │ ├── form_fields.html.twig │ │ │ │ ├── forms.html.twig │ │ │ │ └── tooltip.html.twig │ │ │ ├── Routing/ │ │ │ │ └── PluginsLoader.php │ │ │ ├── Security/ │ │ │ │ ├── Encoder/ │ │ │ │ │ └── NewscoopPasswordEncoder.php │ │ │ │ ├── Http/ │ │ │ │ │ └── Authentication/ │ │ │ │ │ ├── AbstractAuthenticationHandler.php │ │ │ │ │ ├── AbstractLogoutHandler.php │ │ │ │ │ ├── AuthenticationFailedHandler.php │ │ │ │ │ ├── AuthenticationFrontendSuccessHandler.php │ │ │ │ │ ├── AuthenticationSuccessHandler.php │ │ │ │ │ ├── FrontendLogoutSuccessHandler.php │ │ │ │ │ ├── InteractiveDoctrineAuthService.php │ │ │ │ │ ├── InteractiveLogin.php │ │ │ │ │ ├── LogoutSuccessHandler.php │ │ │ │ │ ├── OAuthLogoutSuccessHandler.php │ │ │ │ │ └── OAuthSuccessHandler.php │ │ │ │ └── User/ │ │ │ │ └── SimpleUserProvider.php │ │ │ ├── Services/ │ │ │ │ ├── SystemPreferencesService.php │ │ │ │ └── TopicService.php │ │ │ ├── Session/ │ │ │ │ └── Storage.php │ │ │ ├── Tests/ │ │ │ │ └── Controller/ │ │ │ │ └── DefaultControllerTest.php │ │ │ └── Twig/ │ │ │ ├── IncludeAsVerbatimExtension.php │ │ │ └── NewscoopExtension.php │ │ ├── PluginGeneratorBundle/ │ │ │ ├── Command/ │ │ │ │ ├── GeneratePluginBundleCommand.php │ │ │ │ ├── GeneratorPluginCommand.php │ │ │ │ └── Validators.php │ │ │ ├── DependencyInjection/ │ │ │ │ ├── Configuration.php │ │ │ │ └── NewscoopPluginGeneratorExtension.php │ │ │ ├── Generator/ │ │ │ │ ├── BundleGenerator.php │ │ │ │ └── Generator.php │ │ │ ├── NewscoopPluginGeneratorBundle.php │ │ │ ├── Resources/ │ │ │ │ ├── config/ │ │ │ │ │ ├── routing.yml │ │ │ │ │ └── services.yml │ │ │ │ ├── skeleton/ │ │ │ │ │ ├── bundle/ │ │ │ │ │ │ ├── AdminController.php.twig │ │ │ │ │ │ ├── Bundle.php.twig │ │ │ │ │ │ ├── Configuration.php.twig │ │ │ │ │ │ ├── ConfigurationMenuListener.php.twig │ │ │ │ │ │ ├── DefaultController.php.twig │ │ │ │ │ │ ├── DefaultControllerTest.php.twig │ │ │ │ │ │ ├── Extension.php.twig │ │ │ │ │ │ ├── LifecycleSubscriber.php.twig │ │ │ │ │ │ ├── admin.index.html.twig.twig │ │ │ │ │ │ ├── composer.json.twig │ │ │ │ │ │ ├── index.html.twig.twig │ │ │ │ │ │ ├── messages.fr.xlf │ │ │ │ │ │ ├── routing.php.twig │ │ │ │ │ │ ├── routing.xml.twig │ │ │ │ │ │ ├── routing.yml.twig │ │ │ │ │ │ ├── services.php.twig │ │ │ │ │ │ ├── services.xml.twig │ │ │ │ │ │ └── services.yml.twig │ │ │ │ │ ├── controller/ │ │ │ │ │ │ ├── Controller.php.twig │ │ │ │ │ │ ├── ControllerTest.php.twig │ │ │ │ │ │ ├── Template.html.php.twig │ │ │ │ │ │ └── Template.html.twig.twig │ │ │ │ │ ├── crud/ │ │ │ │ │ │ ├── actions/ │ │ │ │ │ │ │ ├── create.php.twig │ │ │ │ │ │ │ ├── delete.php.twig │ │ │ │ │ │ │ ├── edit.php.twig │ │ │ │ │ │ │ ├── index.php.twig │ │ │ │ │ │ │ ├── new.php.twig │ │ │ │ │ │ │ ├── show.php.twig │ │ │ │ │ │ │ └── update.php.twig │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── routing.php.twig │ │ │ │ │ │ │ ├── routing.xml.twig │ │ │ │ │ │ │ └── routing.yml.twig │ │ │ │ │ │ ├── controller.php.twig │ │ │ │ │ │ ├── tests/ │ │ │ │ │ │ │ ├── others/ │ │ │ │ │ │ │ │ ├── full_scenario.php.twig │ │ │ │ │ │ │ │ └── short_scenario.php.twig │ │ │ │ │ │ │ └── test.php.twig │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── edit.html.twig.twig │ │ │ │ │ │ ├── index.html.twig.twig │ │ │ │ │ │ ├── new.html.twig.twig │ │ │ │ │ │ ├── others/ │ │ │ │ │ │ │ ├── actions.html.twig.twig │ │ │ │ │ │ │ └── record_actions.html.twig.twig │ │ │ │ │ │ └── show.html.twig.twig │ │ │ │ │ └── form/ │ │ │ │ │ └── FormType.php.twig │ │ │ │ └── views/ │ │ │ │ └── Default/ │ │ │ │ └── index.html.twig │ │ │ └── Tests/ │ │ │ └── Controller/ │ │ │ └── DefaultControllerTest.php │ │ └── ZendBridgeBundle/ │ │ ├── Controller/ │ │ │ └── BridgeController.php │ │ ├── DependencyInjection/ │ │ │ ├── Configuration.php │ │ │ └── NewscoopZendBridgeExtension.php │ │ ├── EventListener/ │ │ │ └── ZendApplicationListener.php │ │ ├── NewscoopZendBridgeBundle.php │ │ └── Resources/ │ │ └── config/ │ │ ├── routing.yml │ │ └── services.yml │ ├── template_engine/ │ │ ├── classes/ │ │ │ ├── ArticleAttachmentsList.php │ │ │ ├── ArticleAuthorsList.php │ │ │ ├── ArticleCommentsList.php │ │ │ ├── ArticleImagesList.php │ │ │ ├── ArticleLocationsList.php │ │ │ ├── ArticleTopicsList.php │ │ │ ├── ArticlesList.php │ │ │ ├── BoxArticlesList.php │ │ │ ├── CampConfig.php │ │ │ ├── CampContext.php │ │ │ ├── CampGetImage.php │ │ │ ├── CampHTMLDocument.php │ │ │ ├── CampRequest.php │ │ │ ├── CampSession.php │ │ │ ├── CampSite.php │ │ │ ├── CampSystem.php │ │ │ ├── CampTemplate.php │ │ │ ├── CampURI.php │ │ │ ├── CampURIShortNames.php │ │ │ ├── CampURITemplatePath.php │ │ │ ├── CampVersion.php │ │ │ ├── Captcha.php │ │ │ ├── ComparisonOperation.php │ │ │ ├── Exceptions.php │ │ │ ├── ImagesList.php │ │ │ ├── IssuesList.php │ │ │ ├── LanguagesList.php │ │ │ ├── ListObject.php │ │ │ ├── MapArticlesList.php │ │ │ ├── MapLocationsList.php │ │ │ ├── Operator.php │ │ │ ├── PlaylistList.php │ │ │ ├── SearchResultsList.php │ │ │ ├── SearchResultsSolrList.php │ │ │ ├── SectionAuthorsList.php │ │ │ ├── SectionsList.php │ │ │ ├── SubtitlesList.php │ │ │ ├── SubtopicsList.php │ │ │ ├── SyntaxError.php │ │ │ ├── UserCommentsList.php │ │ │ └── UsersList.php │ │ └── metaclasses/ │ │ ├── MetaAction.php │ │ ├── MetaActionLogin.php │ │ ├── MetaActionPreview_Comment.php │ │ ├── MetaActionSearch_Articles.php │ │ ├── MetaActionSubmit_Comment.php │ │ ├── MetaArticle.php │ │ ├── MetaArticleBodyField.php │ │ ├── MetaArticleDatetime.php │ │ ├── MetaArticleSlideshowList.php │ │ ├── MetaAttachment.php │ │ ├── MetaAuthor.php │ │ ├── MetaAuthorBiography.php │ │ ├── MetaBoolean.php │ │ ├── MetaComment.php │ │ ├── MetaDate.php │ │ ├── MetaDatetime.php │ │ ├── MetaDbObject.php │ │ ├── MetaEntity.php │ │ ├── MetaImage.php │ │ ├── MetaInteger.php │ │ ├── MetaIssue.php │ │ ├── MetaLanguage.php │ │ ├── MetaMap.php │ │ ├── MetaMapLocation.php │ │ ├── MetaMapLocationMultimedia.php │ │ ├── MetaOrder.php │ │ ├── MetaPlaylist.php │ │ ├── MetaPublication.php │ │ ├── MetaSection.php │ │ ├── MetaSlideshow.php │ │ ├── MetaSlideshowItem.php │ │ ├── MetaSlideshowItemList.php │ │ ├── MetaString.php │ │ ├── MetaSubscription.php │ │ ├── MetaSubscriptions.php │ │ ├── MetaSubtitle.php │ │ ├── MetaSwitch.php │ │ ├── MetaTemplate.php │ │ ├── MetaTime.php │ │ ├── MetaTopic.php │ │ ├── MetaURL.php │ │ └── MetaUser.php │ ├── themes/ │ │ └── system_templates/ │ │ ├── _campsite_error.tpl │ │ ├── _campsite_message.tpl │ │ ├── _campsite_offline.tpl │ │ ├── _events_notifier.tpl │ │ ├── _feed/ │ │ │ └── default.tpl │ │ ├── _pagination/ │ │ │ ├── twitter_bootstrap_v2_pagination.tpl │ │ │ └── twitter_bootstrap_v3_pagination.tpl │ │ ├── _subscription_notifier.tpl │ │ ├── css/ │ │ │ ├── _style_offline.css │ │ │ └── main.css │ │ ├── editor_image.tpl │ │ ├── oauth_authorize.tpl │ │ ├── oauth_login.tpl │ │ └── oauth_result.tpl │ └── upgrade.php ├── old_features/ │ ├── 0_endpoints.feature.unfinished │ ├── 10_images.feature │ ├── 11_attachments.feature │ ├── 12_snippet.feature │ ├── 1_article.feature │ ├── 2_author.feature │ ├── 3_comments.feature │ ├── 4_user.feature │ ├── 5_topic.feature │ ├── 6_slideshow.feature │ ├── 7_section.feature │ ├── 8_articles_lists.feature │ ├── 99_functions.feature │ └── bootstrap/ │ ├── FeatureContext.php │ └── PublicationListener.php ├── phpspec.yml └── spec/ └── Newscoop/ ├── Gimme/ │ └── PaginatorServiceSpec.php ├── GimmeBundle/ │ ├── Controller/ │ │ ├── ArticlesControllerSpec.php │ │ ├── EditorialCommentsApiControllerSpec.php │ │ ├── SlideshowsControllerSpec.php │ │ ├── TopicsControllerSpec.php │ │ └── UserTopicsControllerSpec.php │ ├── EventListener/ │ │ └── HookListenerSpec.php │ ├── Serializer/ │ │ └── Topic/ │ │ └── TopicPathHandlerSpec.php │ └── Services/ │ └── EditorialCommentsServiceSpec.php ├── Image/ │ └── ImageServiceSpec.php ├── Installer/ │ └── Services/ │ └── BootstrapServiceSpec.php ├── NewscoopBundle/ │ ├── Controller/ │ │ ├── BackendPublicationsControllerSpec.php │ │ └── TopicsControllerSpec.php │ └── EventListener/ │ └── IssueListenerSpec.php └── Services/ ├── ArticleServiceSpec.php ├── AttachmentServiceSpec.php ├── CommentServiceSpec.php ├── EditorServiceSpec.php ├── IssueServiceSpec.php ├── RelatedArticlesServiceSpec.php └── ThemesServiceSpec.php ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ newscoop/images/* newscoop/cache/* newscoop/plugins/* newscoop/backup/* newscoop/vendor/ newscoop/newscoop-indexer.lock newscoop/.htaccess newscoop/conf/configuration.php newscoop/conf/database_conf.php newscoop/templates_cache/* newscoop/themes/publication_* newscoop/themes/unassigned/empty/ newscoop/themes/unassigned/system_templates/ newscoop/install/cron_jobs/all_at_once newscoop/application/configs/application.ini newscoop/application/configs/parameters/custom_parameters.yml newscoop/composer.phar .DS_Store ================================================ FILE: .travis.yml ================================================ language: php php: - '5.6' - '5.5' - '5.4' - '5.3' notifications: email: false before_script: - sudo apt-get update > /dev/null - sudo apt-get install -y --force-yes apache2 libapache2-mod-php5 php5-curl php5-mysql php5-intl php5-gd postfix - echo "$(curl -fsSL https://gist.github.com/ahilles107/8255528/raw/fa949a791fe882323a34decd3b0caf130b6d52d6/travis_newscoop.dev)" | sed -e "s,PATH,`pwd`/newscoop,g" | sudo tee /etc/apache2/sites-available/default > /dev/null - echo "127.0.0.1 newscoop.dev" | sudo tee -a /etc/hosts - sudo a2enmod rewrite - sudo service apache2 restart - mysql -e 'create database newscoop;' -uroot - cd newscoop/ - composer self-update - composer install --prefer-dist - "./application/console newscoop:install --fix --database_name newscoop --database_user root --no-client" - sudo php upgrade.php - "./application/console oauth:create-client testclient newscoop.dev newscoop.dev --test" - "./application/console user:create test@example.org testpassword testuser 'Test Name' 'Test Surname' true 1 1" - cd .. - sudo php newscoop/scripts/fixer.php script: - newscoop/vendor/bin/phpspec run --format pretty - newscoop/vendor/bin/behat ================================================ FILE: Dockerfile ================================================ # Start with fresh Unbuntu FROM ubuntu:14.04 # Install dependencies RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ git \ apache2 \ php5-cli php5-curl php5-mysql php5-gd php5-intl \ libapache2-mod-php5 \ imagemagick \ curl EXPOSE 80 WORKDIR /usr/share/newscoop #VOLUME /var/www # copy virtual host config and source code ADD docker/newscoop.conf /etc/apache2/sites-available/newscoop.conf ADD docker/newscoop-dev.conf /etc/apache2/sites-available/newscoop-dev.conf ADD newscoop /var/www/newscoop # Enable production env RUN a2ensite newscoop # add management scripts ADD docker /usr/share/newscoop # update permissions # 1000 needs to be a dynamic var for the userid of the files # on the host RUN usermod -u 1000 www-data # turn on mod_rewrite, update php config #RUN a2ensite newscoop.conf RUN a2enmod rewrite php5 RUN /bin/echo 'date.timezone = "Europe/Berlin"' >> /etc/php5/apache2/php.ini ENTRYPOINT ["/usr/share/newscoop/docker-entrypoint.sh"] CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"] ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: README.md ================================================ ![Logo](newscoop/admin-style/images/newscoop_logo_big.png) === [![Build Status](https://travis-ci.org/sourcefabric/Newscoop.svg?branch=master)](https://travis-ci.org/sourcefabric/Newscoop) [Newscoop][1] is the open content management system for professional journalists. Features for the modern newsroom include multiple author management, issue-and-section based publishing, geolocation and multilingual content management. The enterprise-standard journalist’s dashboard and a templating engine supporting anything from HTML5 to mobile complete this fast production and publishing system. Read more about Newscoop history on his [wikipedia page][5]. Quick links to our resources are: * Manuals for Newscoop [http://manuals.sourcefabric.org][6] * Forums and mailing lists: [http://forum.sourcefabric.org][7] * Bug Tracking: [http://dev.sourcefabric.org/browse/CS][8] * Public source code hosting: [http://github.com/sourcefabric/Newscoop][9] * Download link: [https://github.com/sourcefabric/Newscoop/releases/latest][10] * Developer's wiki: [https://wiki.sourcefabric.org/display/CS/][11] * Developer's blog: [https://dev-blog.sourcefabric.org][12] * Plugins Development’s documentation: [http://docs.sourcefabric.org/projects/newscoop-plugins/en/latest/][15] * RESTful API documentation: [http://docs.sourcefabric.org/projects/newscoop-restful-api/en/master/][16] * Developer's Cookbooks: [http://docs.sourcefabric.org/projects/newscoop-cookbook/en/latest/][17] ## Installation **Using console command** php application/console newscoop:install --fix --database_name newscoop --database_user root --database_password password Default Admin Panel account is `admin` with password `password`. For more details run: php application/console newscoop:install --help **Using docker** Make sure docker and docker compose are installed (boot2docker or docker machine on OSX as well). Add the line ```127.0.0.1 newscoop.docker``` to your ```/etc/hosts``` file. OSX users should use the ip of their virtualbox (e.g. ```boot2docker ip```). For running Newscoop in production mode: ```bash docker-compose build docker-compose up ``` For running Newscoop in development mode: ```bash docker-compose -f docker-compose-dev.yml build docker-compose -f docker-compose-dev.yml up ``` ## Requirements - PHP version must be at least 5.4 on Debian and CentOS to run Newscoop properly. See [PHP bug][14]. - MySQL can't work in "strict mode". Newscoop will currently break in many places when "strict mode" is enabled. - If you use `E_DEPRECATED` error_reporting level in PHP 5.6, you can get the behaviour described in this [PHP bug][18] report. `always_populate_raw_post_data` must be set to `-1` in your `php.ini` file. **Compatibility** | Browsers | Tablets | Smartphones | | -------- | ------- | ----------- | | Safari 7.1+| not supported | not supported | | Google Chrome 31+ | not supported | not supported | | Internet Explorer 9+ | not supported | not supported | | Firefox 35+ | not supported | not supported | | Opera 27+ | not supported | not supported | ## REST API documentation REST API documentation will be available under the link: `http://www.domain.com/documentation/rest-api/` after Newscoop installation is done. ## How to contribute Only 4 steps: * Fork sourcefabric/Newscoop repository - [how to fork][2]. * Clone your fork * Create new local feature branch - [how to create branch][3] * Create pull request with your feature/bugfix - [how to create pull request][4] ## License Newscoop is licensed under the GPL3 license. [1]: http://www.sourcefabric.org/en/newscoop/ [2]: https://help.github.com/articles/fork-a-repo [3]: http://learn.github.com/p/branching.html [4]: https://help.github.com/articles/creating-a-pull-request [5]: http://en.wikipedia.org/wiki/Newscoop [6]: http://manuals.sourcefabric.org [7]: http://forum.sourcefabric.org [8]: http://dev.sourcefabric.org/browse/CS [9]: http://github.com/sourcefabric/Newscoop [10]: https://github.com/sourcefabric/Newscoop/releases/latest [11]: https://wiki.sourcefabric.org/display/CS/ [12]: https://dev-blog.sourcefabric.org/en/blogs/?filter=1 [13]: https://github.com/sourcefabric/Newscoop/blob/master/newscoop/docs/INSTALL-ubuntu.md [14]: https://bugs.php.net/bug.php?id=54709 [15]: http://docs.sourcefabric.org/projects/newscoop-plugins/en/latest/ [16]: http://docs.sourcefabric.org/projects/newscoop-restful-api/en/master/ [17]: http://docs.sourcefabric.org/projects/newscoop-cookbook/en/latest/ [18]: https://bugs.php.net/bug.php?id=66763 ================================================ FILE: behat.yml ================================================ default: paths: features: %behat.paths.base%/features bootstrap: %behat.paths.features%/bootstrap filters: context: parameters: base_url: http://newscoop.dev/api oauth_url: http://newscoop.dev/oauth publication: newscoop.dev api_prefix: api paths: base: %behat.paths.base% bootstrap: features/bootstrap steps: features/steps hooks: features/support subContexts: associative: true ================================================ FILE: docker/docker-entrypoint.sh ================================================ #!/bin/bash if [ "$1" = 'newscoop' ]; then # install composer and install PHP dependencies if [ ! -f /var/www/newscoop/composer.phar ]; then cd /var/www/newscoop && curl -sS https://getcomposer.org/installer | php fi if [ "$APPLICATION_ENVIRONMENT" = "dev" ]; then # Disable production, enable dev a2dissite newscoop a2ensite newscoop-dev cd /var/www/newscoop && /usr/bin/php composer.phar install else cd /var/www/newscoop && /usr/bin/php composer.phar install --no-dev fi # check if we should install if [ -f /var/www/newscoop/conf/installation.php ]; then /usr/share/newscoop/import-newscoop.sh fi # restore default newscoop crontab if [ "$(sudo -u www-data crontab -l)" = "" ]; then touch /var/spool/cron/crontabs/www-data echo "* * * * * php /var/www/newscoop/application/console scheduler:run" | tee -a /var/spool/cron/crontabs/www-data chown www-data:crontab /var/spool/cron/crontabs/www-data fi # catch signlas trap "echo 'caught signal'" HUP INT QUIT KILL TERM cron start #/usr/sbin/apachectl -D FOREGROUND /usr/sbin/apachectl start if [ "$APPLICATION_ENVIRONMENT" = "dev" ]; then tail -F /var/www/newscoop/log/dev.log else tail -F /var/www/newscoop/log/prod.log fi echo "[hit enter key to exit] or run docker stop '" read echo "stopping apache" /usr/sbin/apachectl stop echo "stopping cron" stop cron echo "exited $0" fi exec "$@" ================================================ FILE: docker/docker-newscoop.yml ================================================ newscoop: build: ../ command: newscoop ports: - "80:80" volumes: - ../newscoop:/var/www/newscoop mysql: image: "mysql:5" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: newscoop ================================================ FILE: docker/import-newscoop.sh ================================================ #!/bin/sh SHARE_DIR="/usr/share/newscoop" DATA_DIR="$SHARE_DIR/data" WWW_DIR="/var/www/newscoop" PLUGINS=false CUSTOM_DB=false if [ ! "$(ls -A $DATA_DIR)" ]; then echo "nothing to import" exit 0 fi # import database if [ -s $DATA_DIR/database.sql ] ; then DUMP="$DATA_DIR/database.sql" CUSTOM_DB=true else DUMP="$WWW_DIR/install/Resources/sql/campsite_core.sql" fi # Create database and insert custom or default data mysql -h mysql -u root -proot -e 'CREATE DATABASE newscoop;' mysql -h mysql -u root -proot newscoop < $DUMP; # Update root password to: SoFab mysql -h mysql -u root -proot newscoop -e 'UPDATE liveuser_users SET Password = "sha1$nDB8qhSKXSKD$7cd8fb537cc3f60708dbcc8c8925f3a0600fa444" WHERE id = 1 and UName = "admin"'; # copy system themes to user share if [[ "$(ls -A $DATA_DIR/themes)" ]] ; then mv $WWW_DIR/themes/* $DATA_DIR/themes/ # Remove theme directory so we can create symlink rm -rf $WWW_DIR/themes/ # make theme symlink ln -sf $DATA_DIR/themes $WWW_DIR/themes chown -hR www-data:www-data $DATA_DIR/themes fi # copy plugins if [[ "$(ls -A $DATA_DIR/plugins)" ]] ; then cp -rf $DATA_DIR/plugins/* $WWW_DIR/plugins/ PLUGINS=true fi # copy custom parameters if [[ -s $DATA_DIR/custom_parameters.yml ]] ; then cp $DATA_DIR/custom_parameters.yml $WWW_DIR/application/configs/parameters/custom_parameters.yml fi # Files are required for installed newscoop cp $DATA_DIR/conf/database_conf.php.dist $WWW_DIR/conf/database_conf.php cp $DATA_DIR/conf/configuration.php.dist $WWW_DIR/conf/configuration.php # Set up htaccess cp $WWW_DIR/htaccess.dist $WWW_DIR/.htaccess # Move to directory else composer will complain cd $WWW_DIR php $WWW_DIR/composer.phar dump-autoload --optimize if [[ $PLUGINS && $CUSTOM_DB ]] ; then php $WWW_DIR/application/console plugins:upgrade php $WWW_DIR/composer.phar update php $WWW_DIR/composer.phar dump-autoload --optimize php $WWW_DIR/application/console assets:install --symlink public fi # Clear the cache rm -rf $WWW_DIR/cache/* # Run the upgrade script php $WWW_DIR/upgrade.php # Remove files which indicate not yet installed rm $WWW_DIR/conf/upgrading.php rm $WWW_DIR/conf/installation.php ================================================ FILE: docker/newscoop-dev.conf ================================================ DocumentRoot /var/www/newscoop ServerName newscoop.docker ServerAlias localhost boot2docker *.boot2docker newscoop.docker *.newscoop.docker newscoop.dckr *.newscoop.dckr DirectoryIndex index.php index.html Options -Indexes +FollowSymLinks -MultiViews AllowOverride All Order allow,deny Allow from all Require all granted SetEnv APPLICATION_ENV "development" ================================================ FILE: docker/newscoop.conf ================================================ DocumentRoot /var/www/newscoop ServerName newscoop.docker ServerAlias localhost boot2docker *.boot2docker newscoop.docker *.newscoop.docker newscoop.dckr *.newscoop.dckr DirectoryIndex index.php index.html Options -Indexes +FollowSymLinks -MultiViews AllowOverride All Order allow,deny Allow from all Require all granted ================================================ FILE: docker-compose-dev.yml ================================================ newscoop: extends: file: docker/docker-newscoop.yml service: newscoop links: - mysql environment: - APPLICATION_ENVIRONMENT=dev mysql: extends: file: docker/docker-newscoop.yml service: mysql ================================================ FILE: docker-compose.yml ================================================ newscoop: extends: file: docker/docker-newscoop.yml service: newscoop links: - mysql mysql: extends: file: docker/docker-newscoop.yml service: mysql ================================================ FILE: features/0_api_articles.feature ================================================ Feature: Articles I need to be able to create and update articles Scenario: Check if route is correct Given that I want to find an articles When I request "/articles" And the response is JSON Scenario: Create new article Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | <> | 30 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "new_article" Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 1 || | onSection | 1 || | keywords | test keywords | 30 | | fields[content] | <> | 35 | When I submit "article" data to "<>" Then the response status code should be 200 And the response is JSON And field "keywords" in the response should be "test keywords" Scenario: Getting all article's topics Given that I want to check if there are any topics attached to the article And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/articles/1/en/topics?query=" Then the response status code should be 200 And the response is JSON And the response should contain field "items" ================================================ FILE: features/1_api_images.feature ================================================ Feature: Images I need to be able to work with images api Scenario: Check if route is correct Given that I want to find an articles When I request "/images" And the response is JSON Scenario: Create new image Given that I want to create an new image And that i have fake "image" data: | description | <> | 6 | | photographer | <> | | | photographer_url | <> | | | place | <
> | | | image | <> | /tmp,640,480 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "image" data to "/images" Then the response status code should be 201 And the response is JSON And the response should contain field "photographer" And the response should contain field "photographerUrl" And the response should contain field "description" Then save new item location as "new_image" Given that I want to find an image And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 200 And the response is JSON And the response should contain field "photographer" And the response should contain field "photographerUrl" And the response should contain field "description" Given that I want to create an new image And that i have fake "image" data: | description | <> | 12 | | photographer | <> | | | photographer_url | <> | | | place | <
> | | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "image" data to "<>" Then the response status code should be 200 And the response is JSON And the response should contain field "photographer" And the response should contain field "photographerUrl" And the response should contain field "description" Given that I want to delete an image And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 204 And the response is JSON ================================================ FILE: features/2_api_linkImage_to_article.feature ================================================ Feature: Images I need to be able to work link images to articles Scenario: Create new article and image Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | <> | 30 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "new_article" Given that I want to create an new image And that i have fake "image" data: | description | <> | 6 | | photographer | <> | | | photographer_url | <> | | | place | <
> | | | image | <> | /tmp,640,480 | When I submit "image" data to "/images" Then the response status code should be 201 And the response is JSON And the response should contain field "photographer" And the response should contain field "photographerUrl" And the response should contain field "description" Then save new item location as "new_image" Given that I want to link an image to article And that i have "link" header with "<$$new_image$$; rel='image'>" value When I request "<>" Then the response status code should be 201 And the response is JSON Given that I want to unlink an image from article And that i have "link" header with "<$$new_image$$; rel='image'>" value When I request "<>" Then the response status code should be 204 And the response is JSON Given that I want to delete an image When I request "<>" Then the response status code should be 204 And the response is JSON ================================================ FILE: features/3_api_articles_search.feature ================================================ Feature: Endpoints I need to be able to create and search articles Scenario: Check if route is correct Given that I want to find an articles When I request "/articles" And the response is JSON Scenario: Create new article Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | unique keyword | | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "new_article" # we need publish that article first to make it searchable Given that I want to find an article And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/search/articles?query=unique keyword" Then the response status code should be 200 And the response is JSON And the response should contain field "items" ================================================ FILE: features/3_api_topics.feature ================================================ Feature: Testing Topics API In order to maintain topics through the API As a service user I want to see if the topics management works as expected Scenario: Checking topics endpoint When I request "/topics" Then the response is JSON Scenario: Creating a new root topic and subtopic, checking if topics have been created successfully Given that I want to make a new topic And that i have fake "topic" data: | title | roottopic | 4 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "topic" data to "/topics" Then the response status code should be 201 And the response is JSON Then save new item location as "root_topic" Given that I want to check if root topic has been created successfully When I request "<>" Then the response status code should be 200 And the response is JSON And the response should contain field "id" And the response should contain field "title" And the response should contain field "left" And the response should contain field "right" And the response should contain field "root" And the response should contain field "level" And the response should contain field "translations" And field "level" in the response should be "0" And field "title" in the response should be "roottopic" And save "id" field under location "topic_id" Given that I want to make a new subtopic And that i have fake "topic" data: | title | <> | 4 | | parent | (topic_id) || And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "topic" data to "/topics" Then the response status code should be 201 And the response is JSON Then save new item location as "sub_topic" Given that I want to check if subtopic has been created successfully When I request "<>" Then the response status code should be 200 And the response is JSON And the response should contain field "id" And the response should contain field "title" And the response should contain field "parent" And the response should contain field "left" And the response should contain field "right" And the response should contain field "root" And the response should contain field "level" And the response should contain field "translations" And field "parent" in the response should be "(topic_id)" And field "level" in the response should be "1" Given that I want to delete an previously created subtopic And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 204 And the response is JSON Scenario: Getting all the topics Given that I want to check if there are any topics And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/topics" Then the response status code should be 200 And the response is JSON And the response should contain field "items" Scenario: Creating a new topic and attaching it directly to the article Given that I want to make a new topic and attach it to the article And that i have fake "topic" data: | title | <> | 4 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "topic" data to "/articles/1/en/topics" Then the response status code should be 201 And the response is JSON Then save new item location as "new_topic" Given that I want to check if topic has been created successfully When I request "<>" Then the response status code should be 200 And the response is JSON And the response should contain field "id" And the response should contain field "title" And the response should contain field "left" And the response should contain field "right" And the response should contain field "root" And the response should contain field "level" And the response should contain field "translations" And field "level" in the response should be "0" Given that I want to delete an previously created topic And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 204 And the response is JSON Scenario: Getting all the topics attached to a given article Given that I want to check if there are topics attached to the article When I request "/topics/article/1/en" And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" Then the response status code should be 200 And the response is JSON Scenario: Getting the list of the topics by given search query Given that I want to find an topic by given title And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/search/topics?query=roottopic" Then the response status code should be 200 And the response is JSON And the response should contain field "items" Scenario: Getting articles by given topic Given that I want to find an articles by given topic And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/topics/1/en/articles" Then the response status code should be 200 And the response is JSON And the response should contain field "items" Scenario: Creating a new root topic with the title that already exist Given that I want to make a new topic And that i have fake "topic" data: | title | roottopic | 4 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "topic" data to "/topics" Then the response status code should be 409 And the response is JSON Then save new item location as "root_topic" ================================================ FILE: features/4_api_link_unlink_topic_to_from_article.feature ================================================ Feature: Testing linking/unlinking topics to/from the articles In order to link/unlink topics through the API As a service user I want to see if the topics can be linked or unlinked to/from the articles Scenario: Create a new article and topic, then link/unlink topic from created article. Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | <> | 30 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "new_article" Given that I want to make a new topic And that i have fake "topic" data: | title | <> | 4 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "topic" data to "/topics" Then the response status code should be 201 And the response is JSON Then save new item location as "new_topic" Given that I want to link that topic to the article And that i have "link" header with "<$$new_topic$$; rel='topic'>" value And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 201 And the response is JSON Given that I want to unlink that topic from article And that i have "unlink" header with "<$$new_topic$$; rel='topic'>" value And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 204 And the response is JSON ================================================ FILE: features/5_api_related_articles.feature ================================================ Feature: Testing linking/unlinkig related articles feature I need to be able to link and unlink articles (aka. related articles) Scenario: Create articles and link them them Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | <> | 30 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "base_article" Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | <> | 30 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "second_article" Given that I want to create an new article And that i have fake "article" data: | name | <> | 4 | | language | 1 || | publication | 1 || | issue | || | section | || | comments_enabled | 1 || | type | news || | onFrontPage | 0 || | onSection | 0 || | keywords | <> | 30 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "article" data to "/articles/create" Then the response status code should be 201 And the response is JSON And the response should contain field "number" And the response should contain field "title" And the response should contain field "type" Then save new item location as "third_article" Given that I want to link an article to the article And that i have "link" header with "<$$second_article$$; rel='article'>" value When I request "<>" Then the response status code should be 201 And the response is JSON Given that I want to link an article to the article And that i have "link" header with "<$$third_article$$; rel='article'>" value When I request "<>" Then the response status code should be 201 And the response is JSON Given that I want to link an article to the article And that i have "link" header with "<$$second_article$$; rel='article'>,<2; rel='article-position'>" value When I request "<>" Then the response status code should be 201 And the response is JSON Given that I want to unlink an article to the article And that i have "link" header with "<$$second_article$$; rel='article'>" value When I request "<>" Then the response status code should be 204 And the response is JSON ================================================ FILE: features/6_api_link_unlink_topic.feature ================================================ Feature: Testing linking/unlinkig topics (follow/unfollow topics by users) I need to be able to follow/unfollow topics by given users Scenario: Create a new topic and link it to the user, unlink and delete Given that I want to make a new topic And that i have fake "topic" data: | title | <> | 4 | And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I submit "topic" data to "/topics" Then the response status code should be 201 And the response is JSON Then save new item location as "new_topic" Given that I want to link that previously created topic to the user And that i have "link" header with "<$$new_topic$$; rel='topic'>" value When I request "/users/9" Then the response status code should be 201 And the response is JSON Given that I want to check if there are any topics by given user And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/users/9/topics" Then the response status code should be 200 And the response is JSON And the response should contain field "items" When I request "/users/9" Then the response status code should be 200 And the response is JSON And the response should contain field "topics" Given that I want to unlink that previously created topic from the user And that i have "unlink" header with "<$$new_topic$$; rel='topic'>" value When I request "/users/9" Then the response status code should be 204 And the response is JSON Given that I want to delete an previously created topic And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "<>" Then the response status code should be 204 And the response is JSON Given that I want to check if topic was successfully unassigned from the user after deletion And I'm logged in as "testuser" with "testpassword" with client "1_svdg45ew371vtsdgd29fgvwe5v" and secret "h48fgsmv0due4nexjsy40jdf3sswwr" When I request "/users/9" Then the response status code should be 200 And the response is JSON And in the response there is no field called "topics" ================================================ FILE: features/bootstrap/FeatureContext.php ================================================ * @license MIT license */ use Behat\Behat\Context\ClosuredContextInterface; use Behat\Behat\Context\BehatContext; use Symfony\Component\Finder\Finder; require_once __DIR__ . '/RestContext.php'; /** * Features context. */ class FeatureContext extends BehatContext implements ClosuredContextInterface { /** * @var array */ protected $parameters; /** * Store data used across different subcontexts and steps. * * @var array */ protected $data = array(); /** * Initializes context. * Every scenario gets it's own context object. * * @param array $parameters Context parameters (set them up through behat.yml) * @throws \InvalidArgumentException * @throws \Exception */ public function __construct(array $parameters) { if (empty($parameters)) { throw new \InvalidArgumentException('Parameters not loaded.'); } $this->parameters = $parameters; $this->useContext('RestContext', new RestContext($parameters)); /** * You may chain other contexts as sub-contexts of this main context via parameters. In this way all the * context classes may communicate with each other. */ if (array_key_exists('subContexts', $parameters) && is_array($parameters['subContexts'])) { $this->loadBootstrapScripts($this->getResourcePath('bootstrap')); foreach ($parameters['subContexts'] as $subContext) { if (class_exists($subContext)) { $this->useContext($subContext, new $subContext()); } else { throw new \Exception("Context '{$subContext}' doesn't exist."); } } } } /** * Returns array of step definition files (*.php). * * @return array */ public function getStepDefinitionResources() { $path = $this->getResourcePath('steps') ?: (__DIR__ . '/../steps'); return $this->getFiles($path); } /** * Returns array of hook definition files (*.php). * * @return array * @throws \RuntimeException */ public function getHookDefinitionResources() { $path = $this->getResourcePath('hooks') ?: (__DIR__ . '/../support'); return $this->getFiles($path); } /** * Get data by field name, or return all data if no field name provided. * * @param string $name Field name. * @return mixed * @throws \Exception */ public function getData($name = null) { if (!isset($name)) { return $this->data; } elseif (array_key_exists($name, $this->data)) { return $this->data[$name]; } throw new \Exception('Requested data not exist.'); } /** * Set value on given field name. * * @param string $name Field name. * @param mixed $value Field value. * @return void */ public function setData($name, $value) { $this->data[$name] = $value; } /** * Check if specified field name exists or not. * * @param string $name Field name. * @return mixed */ public function dataExists($name) { return array_key_exists($name, $this->data); } /** * This public method is also for other context(s) to set parameter(s) into this context. * * @param string $name * @param mixed $value * @return void */ public function setParameter($name, $value) { $this->parameters[$name] = $value; } /** * Get context parameter. * * @param string $name Parameter name. * @return mixed */ public function getParameter($name) { return array_key_exists($name, $this->parameters) ? $this->parameters[$name] : null; } /** * Returns path that points to specified resources. * * @param string $type Resource type. Either 'boostrap', 'steps' or 'hooks'. * @return string Return path back. * @throws \RuntimeException */ protected function getResourcePath($type) { $paths = $this->getParameter('paths'); if (array_key_exists($type, $paths)) { $pathBase = array_key_exists('base', $paths) ? $paths['base'] : ''; $pathType = $paths[$type]; // Check if it's an absolute path. if (substr($pathType, 0, 1) == DIRECTORY_SEPARATOR) { if (empty($pathBase)) { return $pathType; } else { throw new \RuntimeException( sprintf('You may only use relative path for type "%s" when base path is presented.', $type) ); } } else { // TODO: check if there is a trailing directory separator in the base path. return ($pathBase ? ($pathBase . DIRECTORY_SEPARATOR) : '') . $pathType; } } return ''; } /** * Get files of certain type under specified directory. * * @param string $dir A directory. * @param string $ext File extension. * @return array * @throws \InvalidArgumentException */ protected function getFiles($dir, $ext = 'php') { if (!is_dir($dir)) { throw new \InvalidArgumentException(sprintf('Given path "%s" is not a directory.', $dir)); } if (!is_readable($dir)) { throw new \InvalidArgumentException(sprintf('Given path "%s" is not readable.', $dir)); } if (!preg_match('/^[0-9a-z]+$/i', $ext)) { throw new \InvalidArgumentException( sprintf('Given file extension "%s" is invalid (may only contain digits and/or letters).', $dir) ); } $finder = new Finder; return $finder->files()->name('*.' . $ext)->in($dir); } /** * Requires *.php scripts from bootstrap/ folder. * * @param string $path * @see Behat\Behat\Console\Processor\LocatorProcessor::loadBootstrapScripts() */ protected function loadBootstrapScripts($path) { $iterator = Finder::create() ->files() ->name('*.php') ->sortByName() ->in($path) ; foreach ($iterator as $file) { include_once (string) $file; } } } ================================================ FILE: features/bootstrap/RestContext.php ================================================ * @license MIT license */ use Behat\Behat\Context\BehatContext; use Behat\Behat\Context\Step; use Buzz\Message\Form\FormUpload; /** * Rest context. */ class RestContext extends BehatContext { const METHOD_DELETE = 'DELETE'; const METHOD_GET = 'GET'; const METHOD_POST = 'POST'; const METHOD_PUT = 'PUT'; const METHOD_PATCH = 'PATCH'; const METHOD_LINK = 'LINK'; const METHOD_UNLINK = 'UNLINK'; /** * @var \Buzz\Browser */ protected $client; /** * @var string */ protected $requestMethod; /** * Used for debugging purpose only. * @var string */ protected $requestUrl; /** * Client access_token * @var string */ protected $access_token = null; /** * Data collected from steps * @var string */ protected $collectedData = array(); /** * Locations collected from steps * @var array */ protected $locations = array(); /** * Headers * @var array */ protected $headers = array(); /** * @var \Buzz\Message\Response */ protected $response; /** * Data decoded from HTTP response. * @var mixed */ protected $responseData; /** * Specifies if the response data should be an associative array or a nested stdClass object hierarchy. * * @var bool */ protected $associative; /** * @var boolean */ protected $responseIsJson; /** * @var \Exception */ protected $responseDecodeException; /** * Initializes context. * Every scenario gets it's own context object. * * @param array $parameters Context parameters (set them up through behat.yml) */ public function __construct(array $parameters) { $fileGetContent = new \Buzz\Client\FileGetContents(); $fileGetContent->setTimeout(15); $this->client = new \Buzz\Browser($fileGetContent); $this->associative = (array_key_exists('associative', $parameters) ? $parameters['associative'] : true); } /** * @Given /^that I want to (delete|remove) an? / * @return void */ public function thatIWantToDelete() { $this->requestMethod = self::METHOD_DELETE; } /** * @Given /^that I want to ((find|look for) an?|check) / * @return void */ public function thatIWantToFind() { $this->requestMethod = self::METHOD_GET; } /** * @Given /^that I want to (add|create|make) an? (new )?/ * @return void */ public function thatIWantToMakeANew() { $this->requestMethod = self::METHOD_POST; } /** * @Given /^that I want to (change|update) (an?|that) / * @return void */ public function thatIWantToUpdate() { $this->requestMethod = self::METHOD_PATCH; } /** * @Given /^that I want to link (an?|that) / * @return void */ public function thatIWantToLink() { $this->requestMethod = self::METHOD_LINK; } /** * @Given /^that I want to unlink (an?|that) / * @return void */ public function thatIWantToUnlink() { $this->requestMethod = self::METHOD_UNLINK; } /** * @Given /^I\'m autheticated with client "([^"]*)" and secret "([^"]*)"$/ * @param string $clientId * @return void * @throws \Exception */ public function authenitcatedWith($client, $secret) { $tokenUrl = '/v2/token?client_id='.$client.'&grant_type=client_credentials&client_secret='.$secret; $this->client->call($this->getMainContext()->getParameter('oauth_url').$tokenUrl, 'GET'); $this->response = $this->client->getLastResponse(); $this->processResponse(); $this->access_token = $this->responseData['access_token']; } /** * @Given /^I\'m logged in as "([^"]*)" with "([^"]*)" with client "([^"]*)" and secret "([^"]*)"$/ * @param string $username * @param string $password * @param string $client * @return void * @throws \Exception */ public function authenitcatedAsWithClient($username, $password, $client, $secret) { $tokenUrl = '/v2/token?client_id='.$client.'&grant_type=password&username='.$username.'&password='.$password.'&client_secret='.$secret; $this->client->call($this->getMainContext()->getParameter('oauth_url').$tokenUrl, 'GET'); $this->response = $this->client->getLastResponse(); $this->processResponse(); $this->access_token = $this->responseData['access_token']; } /** * @Given /^that i have folowing "([^"]*)" data:$/ * @param string $clientId * @return void * @throws \Exception */ public function collectData($dataKey, \Behat\Gherkin\Node\TableNode $data) { foreach ($data->getRows() as $key => $value) { $this->collectedData[$dataKey][$value[0]] = $value[1]; } } /** * @Given /^that i have "([^"]*)" header with "([^"]*)" value$/ * @param string $clientId * @return void * @throws \Exception */ public function collectHeaders($key, $value) { if (strpos($value, '$$') !== false) { $start = '$$'; $end = '$$'; $startpos = strpos($value, $start) + strlen($start); if (strpos($value, $start) !== false) { $endpos = strpos($value, $end, $startpos); if (strpos($value, $end, $startpos) !== false) { $link = substr($value, $startpos, $endpos - $startpos); } } $value = str_replace('$$', '', str_replace('$$', '', str_replace("$$".$link."$$", $this->locations[$link], $value))); } $this->headers[$key] = $value; } /** * @Given /^that i have fake "([^"]*)" data:$/ * @param string $dataKey * @param \Behat\Gherkin\Node\TableNode $data * * @return boolean */ public function collectFakeData($dataKey, \Behat\Gherkin\Node\TableNode $data) { $faker = Faker\Factory::create(); $this->collectedData[$dataKey] = array(); foreach ($data->getRows() as $key => $value) { if (strpos($value[1], '<<') !== false) { $functionName = str_replace('>>', '', str_replace('<<', '', $value[1])); $fakeValue = call_user_func_array(array($faker, $functionName), explode(',', $value[2])); if ($functionName == 'file' || $functionName == 'image') { $fakeValue = new FormUpload($fakeValue); } if (strpos($value[0], '[') !== false) { parse_str($value[0].'='.$fakeValue, $temp); $temp = array($dataKey => $temp); $this->collectedData = array_merge_recursive($this->collectedData, $temp); continue; } $this->collectedData[$dataKey][$value[0]] = $fakeValue; } else { if (strpos($value[0], '[') !== false) { parse_str($value[0].'='.$fakeValue, $temp); $temp = array($dataKey => $temp); $this->collectedData = array_merge_recursive($this->collectedData, $temp); continue; } if (strpos($value[1], '(') !== false) { $locationIndex = str_replace(')', '', str_replace('(', '', $value[1])); $locationValue = $this->locations[$locationIndex]; parse_str($value[0].'='.$locationValue, $temp); $temp = array($dataKey => $temp); $this->collectedData = array_merge_recursive($this->collectedData, $temp); continue; } $this->collectedData[$dataKey][$value[0]] = $value[1]; } } return true; } /** * @Then /^save new item location as "([^"]*)"$/ * @param string $location * * @return boolean */ public function collectLocations($locationIndex) { $this->response = $this->client->getLastResponse(); $this->locations[$locationIndex] = $this->response->getHeader('X-Location'); } /** * @Then /^save "([^"]+)" field under location "([^"]*)"$/ * @param string $fieldName * @param string $locationIndex * @return Step\Then|void * @throws Exception */ public function saveFieldValueUnderLocation($fieldName, $locationIndex) { $this->response = $this->client->getLastResponse(); $fieldValue = null; if ($this->responseIsJson) { if ($this->associative) { if (!(is_array($this->responseData)) || !array_key_exists($fieldName, $this->responseData)) { throw new \Exception('Field "'.$fieldName.'" is not set!'); } $fieldValue = $this->responseData[$fieldName]; } else { if (!($this->responseData instanceof stdClass) || !property_exists($this->responseData, $name)) { throw new \Exception('Field "'.$fieldName.'" is not set!'); } $fieldValue = $this->responseData->$fieldName; } $this->locations[$locationIndex] = $fieldValue; } else { return new Step\Then('the response is JSON'); } } /** * @When /^I request "([^"]*)"$/ * @param string $pageUrl * @return void * @throws \Exception */ public function iRequest($pageUrl) { $this->responseData = $this->responseDecodeException = null; $this->responseIsJson = false; if ($this->access_token) { $this->headers['Authorization'] = 'Bearer '.$this->access_token; } $this->client->call( $this->processPageUrl($pageUrl), strtolower($this->requestMethod), $this->headers ); $this->response = $this->client->getLastResponse(); } /** * @When /^I submit "([^"]*)" data to "([^"]*)"$/ * @param string $pageUrl * @return void * @throws \Exception */ public function iSubmitDataTo($dataKey, $pageUrl) { $this->responseData = $this->responseDecodeException = null; $this->responseIsJson = false; if ($this->access_token) { $this->headers['Authorization'] = 'Bearer '.$this->access_token; } $this->client->submit( $this->processPageUrl($pageUrl), array($dataKey => $this->collectedData[$dataKey]), strtolower($this->requestMethod), $this->headers ); $this->response = $this->client->getLastResponse(); } public function processPageUrl($pageUrl) { if (strpos($pageUrl, '<<') !== false) { $locationIndex = str_replace('>>', '', str_replace('<<', '', $pageUrl)); return $this->locations[$locationIndex]; } return $this->getMainContext()->getParameter('base_url').$pageUrl; } /** * This public method is also for other context(s) to process REST API call and inject response into this context. * * @param \Buzz\Message\Response $response * @param boolean $asJson Process the response as JSON or not. * @return void */ public function processResponse(\Buzz\Message\Response $response = null, $asJson = true) { if (!empty($response)) { $this->response = $response; } return $this->processResponseBody($this->response->getContent(), $asJson); } /** * Process response body. This method may also be used by other context(s) to process REST API call and inject * response body into this context by using 2nd parameter $asJson. * * @param string $jsonData * @param boolean $asJson * @return void */ protected function processResponseBody($jsonData, $asJson = true) { if ($asJson) { try { $this->responseData = $this->decodeJson($jsonData); $this->responseIsJson = true; $this->responseDecodeException = null; } catch (\Exception $e) { $this->responseData = $jsonData; $this->responseIsJson = false; $this->responseDecodeException = $e; } } else { $this->responseData = $jsonData; $this->responseIsJson = false; $this->responseDecodeException = null; } } /** * @Then /^the response is( not)? JSON$/ * @param string $notJson * @return void * @throws \Exception */ public function theResponseIsJson($notJson = '') { $this->processResponse(); if (strpos($notJson, 'not') === false) { if (!$this->responseIsJson) { $message = "Response was not JSON\n"; if (!empty($this->responseDecodeException)) { $message .= $this->responseDecodeException->getMessage(); } throw new \Exception($message."\n".$this->response); } } else { if ($this->responseIsJson) { throw new \Exception("Response was JSON\n".$this->response); } } } /** * @Given /^the response should contain field "([^"]*)"$/ * @param string $name * @return void * @throws \Exception */ public function theResponseHasAField($name) { if ($this->responseIsJson) { if ($this->associative) { if (!(is_array($this->responseData)) || !array_key_exists($name, $this->responseData)) { throw new \Exception('Field "'.$name.'" is not set!'); } } else { if (!($this->responseData instanceof stdClass) || !property_exists($this->responseData, $name)) { throw new \Exception('Field "'.$name.'" is not set!'); } } } else { return new Step\Then('the response is JSON'); } } /** * @Then /^in the response there is no field called "([^"]*)"$/ * @param string $name * @return void * @throws \Exception */ public function theResponseShouldNotHaveAField($name) { if ($this->responseIsJson) { if ($this->associative) { if (is_array($this->responseData) && array_key_exists($name, $this->responseData)) { throw new \Exception('Field "'.$name.'" should not be there!'); } } else { if (($this->responseData instanceof stdClass) && property_exists($this->responseData, $name)) { throw new \Exception('Field "'.$name.'" should not be there!'); } } } else { return new Step\Then('the response is JSON'); } } /** * @Then /^field "([^"]+)" in the response should be "([^"]*)"$/ * @param string $fieldName * @param string $fieldValue * @return void * @throws \Exception */ public function valueOfTheFieldEquals($fieldName, $fieldValue) { if ($this->responseIsJson) { if (new Step\Given("the response should contain field \"{$fieldName}\"")) { $fieldValue = $this->extractValueByGivenLocation($fieldValue) ?: $fieldValue; if ($this->associative) { if ($this->responseData[$fieldName] != $fieldValue) { throw new \Exception( sprintf( 'Field value mismatch! (given: "%s", match: "%s")', $fieldValue, $this->responseData[$fieldName] ) ); } } else { if ($this->responseData->$fieldName != $fieldValue) { throw new \Exception( sprintf( 'Field value mismatch! (given: "%s", match: "%s")', $fieldValue, $this->responseData->$fieldName ) ); } } } } else { return new Step\Then('the response is JSON'); } } private function extractValueByGivenLocation($fieldValue) { if (strpos($fieldValue, '(') !== false) { $locationIndex = str_replace(')', '', str_replace('(', '', $fieldValue)); return $this->locations[$locationIndex]; } } /** * @Then /^the response should contain "([^"]*)"$/ * @param string $str * @return void * @throws \Exception */ public function theResponseShouldContain($str) { if (!$this->responseIsJson) { if (strpos($this->responseData, $str) === false) { throw new \Exception(sprintf('String "%s" not found.', $str)); } } else { throw new \Exception('Response should not be a JSON message.'); } } /** * @Then /^field "([^"]+)" in the response should be an? (int|integer) "([^"]*)"$/ * @param string $fieldName * @param string $type * @param string $fieldValue * @return void * @throws \Exception * @todo Need to be better designed. */ public function fieldIsOfTypeWithValue($fieldName, $type, $fieldValue) { if ($this->responseIsJson) { if (new Step\Given("the response should contain field \"{$fieldName}\"")) { switch (strtolower($type)) { case 'int': case 'integer': if (!preg_match('/^(0|[1-9]\d*)$/', $fieldValue)) { throw new \Exception( sprintf( 'Field "%s" is not of the correct type: %s!', $fieldName, $type ) ); } // TODO: We didn't check if the value is as expected here. break; default: throw new \Exception('Unsupported data type: '.$type); break; } } } else { return new Step\Then('the response is JSON'); } } /** * @Then /^the response status code should be (\d+)$/ * @param int $httpStatus * @return void * @throws \Exception */ public function theResponseStatusCodeShouldBe($httpStatus) { if (((string) $this->response->getStatusCode()) !== $httpStatus) { throw new \Exception( sprintf( 'HTTP code does not match %s (actual: %s)', $httpStatus, $this->response->getStatusCode() ) ); } } /** * @Given /^the response should be "([^"]*)"$/ * @param string $string * @return void * @throws \Exception */ public function theResponseShouldBe($string) { $data = $this->response->getBody(true); if ($string != $data) { throw new \Exception( sprintf("Unexpected response.\nExpected response:%s\nActual response:\n%s".$string, $data) ); } } /** * @Then /^echo last response$/ * @return void */ public function echoLastResponse() { $this->printDebug($this->client->getLastRequest()."\n\n".$this->response."\n\n"."access_token: ".$this->access_token); } /** * Return the response object. * * This public method is also for other context(s) to get and process REST API response. * * @return Guzzle\Http\Message\Response */ public function getResponse() { return $this->response; } /** * Return the response data. * * This public method is also for other context(s) to get and process REST API response. * * @return mixed */ public function getResponseData() { return $this->responseData; } /** * Decode JSON string. * * @param string $string A JSON string. * @return mixed * @throws \Exception * @see http://www.php.net/json_last_error */ protected function decodeJson($string) { $json = json_decode($string, $this->associative); switch (json_last_error()) { case JSON_ERROR_NONE: return $json; break; case JSON_ERROR_DEPTH: $message = 'Maximum stack depth exceeded'; break; case JSON_ERROR_STATE_MISMATCH: $message = 'Underflow or the modes mismatch'; break; case JSON_ERROR_CTRL_CHAR: $message = 'Unexpected control character found'; break; case JSON_ERROR_SYNTAX: $message = 'Syntax error, malformed JSON'; break; case JSON_ERROR_UTF8: $message = 'Malformed UTF-8 characters, possibly incorrectly encoded'; break; default: $message = 'Unknown error'; break; } throw new \Exception('JSON decoding error: '.$message); } } ================================================ FILE: features/steps/.gitignore ================================================ * !.gitignore ================================================ FILE: features/support/.gitignore ================================================ * !.gitignore ================================================ FILE: newscoop/.gitignore ================================================ # Bootstrap application/bootstrap* # Symfony directories */log/* cache/* public/uploads/* public/bundles/* ================================================ FILE: newscoop/.rmt.yml ================================================ _default: # VCS CONFIG vcs: git # PREREQUISITES # Actions executed before any questions get asked to the user. # Custom action can be added by provided a relative path the the php script. Example: # - relative/path/to/your-own-sript.php prerequisites: - working-copy-check - display-last-changes # GENERAL CONFIG # Apply to all branches except the one from the 'branch-specific' section # Like prerequisites, you can add your own script. Example: # - relative/path/to/your-own-sript.php version-generator: semantic: allow-label: true version-persister: vcs-tag: # Release with VCS tag tag-prefix: '' # Prefix any tag with the VCS branch name pre-release-actions: bin/UpdateApplicationVersionCurrentVersion.php: ~ composer-update: ~ changelog-update: # Update a CHANGELOG file before the release file: DETAILED-CHANGELOG.txt format: semantic dump-commits: true exclude-merge-commits: true vcs-commit: ~ # Commit the CHANGELOG post-release-actions: vcs-publish: ~ ================================================ FILE: newscoop/DETAILED-CHANGELOG.txt ================================================ VERSION 4 NEWSCOOP 4.3 ========================================================================================================= Version 4.4 - Newscoop 4.4 minor release 08/02/2016 13:42 4.4.7 Newscoop 4.4.7 release 7f5a968 Add information about not supported MySQL "strict mode" a945fc8 Revert "simplify registration confirmation" 530c86a simplify registration confirmation 17a0534 correct error code 1727f85 CS-5923 - After upgrade: fatal error on article editor opening due to topic stuff 66db93e CS-5949: Adds updating of article modified time on topic changes fee1b11 fix spec 14a3d2c update comemnt in code aa9821b remove publication aliases on publication removal, don't set publication in listener when not exist and is still attached to alias fa3677b don't set session lifetime if it's set to 0 418018d add language to url, set it on rendered template f880438 CS-5925 - list_subtopics on empty topic (i.e. root) does not respect order constraint 030e5bc [feature] implement feed controller 9c7fd33 CS-5938 - Job scheduler doesn't execute task if notification isn't enabled 9b3baf9 updated translation resources 206974a remove dump, don't sett cookie in request paramerer bag, change TOL_Language cookie parameters 6967786 remove connection between session lifetime and php gc, allow to login on frontend with username, cover /auth with symfony firewall 3b806e9 fix spec for BackendPublicationsController 55ed031 add links to docs under docs.sourcefabric.org 6876303 move cache_reset file to cache/{env}/cache_reset 7708dc9 [CS-5844] fix implementation 91d23b5 CS-5931: Moves language setting code to helper, instead of view 354dad2 CS-5931: Reverting changes e07139e CS-5931: Persists locale from Symfony request to Zend Smarty View 7534240 AZ-278 - Issue with indexing of articles - remove commented code a1bb9d5 AZ-278 - Issue with indexing of articles a2a38ef ignore comments for not existing articles 8778e2d updated translation resources 4b0bad4 updated translation resources e4470a1 CS-5941: Adds charset as well to header 81dd223 CS-5941: Sets different content-type for rss.tpl or atom.tpl templates 4ed7279 CS-5933: Forces getSEO() always to return an array and fixes typo b91fd21 CS-5942: Adds check if request is set 99254ca remove unused hipchat notifications from travis 5985b49 update outdated tests for phpspec beb8398 simplify repository method, use better way to checking if request is secure 967b131 add support to filter articles by section in /articles api resource 1fd9944 fix code typo 41a865e handle ssl and proper protocol behind proxy 9c1749a removed Visible to non subscribers switch - moved to paywall plugin 9089db1 AZ-266: Typo 84072f6 AZ-266: Add script to run webcode for many many webcodes 0cc66eb AZ-266: Adds return status to webcode command and removes weird loop 4a140ac simplify code in PlaylistsService 6864636 remove broken upgrade script, improve errors handling in publication edit form 456fdbc updated translation resources fac026d updated translation resources eea522a enable sluggable extension 0fa08f9 improve fetching topic articles cecf521 polish and simplify code for front page template theme setting feature d2d526b add support for comments likes and dislikes, render images, snippets, links and more in api this same as in template b3c1e2e Fix issue with 500 error when session not exists in request object eb3388a CS-5931: Stores language in session 82ca2a0 CS-5930: Removes unneeded parameter 3d29357 CS-5844: Initial commit c5211d2 CS-5844: Detect language by uri parts, then issue d714d20 Probable fix for multi theme handling per issue and language 19/10/2015 19:04 4.4.6 Release of Newscoop 4.4.6 aac2ece Adds missing echo 8d0cc94 replace addError with addWarning e901088 rename title to name 8bb5849 AENV-540 - Make name/title field consistent for playlists api - improvements 978cfab AENV-540 - Make name/title field consistent for playlists api 3797e0e Added endpoint with the list of playlist the given article belongs to 25f39d6 fixed script cea5daf hide label when array is empty cfa7a0e fix upgrade scripts 1e7a3c7 updated translation resources 6640e3d updated translation resources adb3e92 CS-5429 - Topic list is opening too long in article editor bc39231 hide featured articles modal's close button f644c69 updated translation resources e8bf2e1 updated translation resources 0552485 updated translation resources b43389e use Number for Article issueId (bug). Use Y in public. f1a0633 updated translation resources 93771b8 updated translation resources ecf2190 CS-5913: Trim and remove duplicate spaces from author names 23ecb63 fixed getting articles by section number 8db76c6 Revert "fixed getting articles by section number" 63ebd0f fixed getting articles by section number d5fa0f5 Fixes languages codes missing for Azerbaijani, Hungarian and Danish a4807e5 Make RFC3066bis field available in templates via rfc_code property 0dac142 preload featured article list by providing an extra parameter in url 8cbe547 add option to fetch hidden article comments 88707e2 added option to override locale from get parameter ecd8b47 CS-5914: Removes reference to non-working composer install command a31d83f Use proper quality for cropped images with png format a4674a0 CS-5913: Update author management page 1c659cb CS-5913: Adds translation to yml file f0e9727 CS-5913: Prevents adding of dplicate authors with the same full name 0154395 CS-5913: Implements optimized author ReadName mechanism 4c2d527 Changes themes field to text (needed for multiple templates under playlist) b00b9ba updated translation resources 4a3d268 CS-5910: Undoes optimization to reanebl in article pagination e0c6455 IM-2915: Removed date limits from search datepicker 13/08/2015 09:24 4.4.5 Newscoop 4.4.5 minor release bb7edfe Adds auto increment to article playlist id b40e46d updated translation resources 3df4f56 updated translation resources ff63bb5 Improves popover text for rich text captions related settings 10f9e3c updated translation resources 180bd31 CS-5908: Adds updating of time_update when workflow_status changes 695ce5e CS-5907 Typo and ambiguity in core string ce77c0e updated translation resources a17ef9e updated translation resources db27b20 removed reloading after removing comment, added option to check comment with just clicking in row 63580e7 Add validation for meta properties in publications form, fix some minor ui issues 5ec786c CS-5898: Use issue number fetched from db f71a3b5 hide visible for non subscriber only when plugin is not enabled and article is public. 486286c add support to Imagick 944c30e setup default images (generated by Newscoop) quality to 90 (from 0 to 100) 25e5222 CS-5903: Adds DISTINCT so related article numbers are only returned once 1c79915 CS-5900 - Translations for legacy plugins dont work anymore 7981832 TW-275 - After update: Attaching a topic to an article doesnt work anymore 131f909 CS-5895: Adds custom redirect to confirm action 49e0dd6 TW-236: Disabled escpaing when RichTextCaption setting is on 2049134 updated translation resources 3f5b03f updated translation resources e4bd5e1 BN-220: Always close transaction 5b00d53 CS-5890: Returns null if there are no lists in theme 13/07/2015 12:30 4.4.4 Newscoop 4.4.4 minor release d3150bc CS-5888: Adds parameter published to list_related_articles 38de286 use proper left join for thread, move search to header - it shows up mor comments on first screen 8b82051 improve MetaTopic class cc5aa8c fixing metatopic class - get results as an array each time 4a8de20 fixed displaying subtopics - missing parameter c2de384 improve detecting and updating plylist templates 271cc5d CS-5880 - Save of order is not working for root topics in topics management 7c15658 comment out php values in htacces and display a proper value 4d5077e CS-5878 - Newscoop 4.4.4 allows only 100M even if php.ini allows higher upload max size value 0c64d4d updated translation resources a753dfc updated translation resources 06e1b8c updated translation resources 4945dbf CS-5867 Increase the height of the modals in Newscoop to take almost full height of the browser window f93923f CS-5871 Improve image caption in admin interface 77ff032 fixed showing topics checkboxes in Firefox de6a516 improve text a51855d CS-5868- adapt the topic design to show more topics in a window 90e61eb [Improvement] Add links to REST API documentation in admin ui 525c86f rename method e733e51 CS-5804 - Subtopics list broken 572aaff [CS-5863] [Fix] User without user type can edit and delete comments 7d4d8a9 CS-5672 - Due to missed several fields in System Preferencies form the Save function doesn't work ae0b88a updated translation resources fb42c17 updated translation resources fcc26ae CS-5861 Update link to user manual 52d4c67 improved slideshows 83dbc07 added thumbnail handler 1e1d3b1 slideshows improvements 99e6532 remove old file 39b8d2d change function name to uri from url c1360a1 don't update change update_time on article update e4075b3 [CS-5853] [Fix] Date of articles in related articles search in the modal is always current day 55bf96a [CS-5851] [Fix] Option to show photos in full size f7ae02b [CS-5822] [Fix] publication management: switching url type does not work f34c9dc CS-5854: Adds css fix so select2 will keep the same width 15614ab CS-5461: Implementes $gimme->article->rating_enabled 465df6e set fallback translations to english by default in bazinga bundle 5cb4bb9 CS-5854: Adds checkbox to search in hidden article types 70853e2 added query to upgrade scripts - article_language column 8c553f2 fixed articles search by topics e378cf8 TW-250: Adds allowfullscreen attribute as valid dda92ee fixed count by menthods 3ff1da0 fixed adding root topic e2fa6c1 [CS-5848] [Fix] Properly save article properties a16341d make cache key aware of the article number b5eeaf5 Changes url seperator to / instead of OS dependant directory seperator 4c9ab14 TW-246 - topic-Management 7eb197b fix wrong collumn name in indexes eb03ac2 updated translation resources 83190f7 updated translation resources 3a7b02f remove not needed code (wrong merging) b7f99ae [CS-5846] [Fix] Default order of available articles in featured article lists manager should be by recency 3669df6 fix spacing 4a35ecd AENV-504: make inputfields for width and height for vimeo/youtube snippets mandatory updated metadata in campsite_core and upgrades sql 26e5a3f replaced sql script with silex script 639dd39 fixed articles ordering 7b8f51c Adds check if article to be deleted actually exists 8a3be16 CS-5779 - Scrolling in playlist is not working for the second playlist if playlists are so long ad20e7c updated translation resources 7f5c09a updated translation resources 83a7d16 AENV-503 - adapt save button behaviour in the attach slideshow modal d17ee14 improve messages a607af7 CS-5825 Better labels and tooltips for Article Type field management 318ef74 BN-200 - Search article by author is not working in Playlist management 3ca5712 CS-5802 - instantly remove items over limit cbd29fc Adds Docker instructions to README 26d0d7e Adds default cron 6e56952 [CS-5825] [Fix] Article Type field controls Show in Editor and Show/Hide have no function ebd266b Fixes cron command 4560f5a CS-5802 - Featured Article List limits do not work as expected 2236933 use public function in cache key, clear chache key on comments status update from article save action fb0e347 CS-5806 - New Topics language filter does not work when session cookie expires 099db89 CS-5809 - Translating a subtopic auto-fills the parent topic translation field 34a71ea CS-5810 - Clicking a topic delete button twice throws a 'Failed to find topic by ID' error e9a4a7e [TW-243] [Fix] Comment-function doesn't work 89bbe1b [CS-5811] [Improvement] Interface for uploading private plugins results in white screen ddd3d7c Adds prod/dev env switch and runs cron server f4f479a [CS-5837] [New Feature] add support for other editors in smarty link function bad60b8 Change indentation for yml, shell to bash and tells tail to keep retrying def602e [CS-5832] [Fix] Comments article preview shows title and date multiple times b9ae549 [CS-5814] [Fix] Article Edit sidebar still has the switch 'Visible to non-subscribers' 77f0b8f uncomment volumns ff7641c clean install sql and snipptets queries 841c93b [CS-5832] [Fix] deactivate comments ordering by article name, allow showing comments for pending articles. b238644 remove unused entrypoint.sh c5c9a95 latest docker build f87011c CS-5799 - Can't select previously created Featured Article Lists via drop-down menu b2f0612 CS-5803 - Tags shown to user while the Featured Article List page is loading e1088dd fixed exception parameters 65079f8 CS-5821 - loading spinner for editorial comments never stops 91efe32 make use of only oembed and extract endpoints 02bee0e use zend request params only when available 0defa79 set a proper jms serializer version 92b1d73 remove not needed header 3463878 keep breadcrumbs for editing user 085fd36 remove jms serializer commit restriction from composer.json 194278c get error message from the response fb32afb use black color for active select's 5d1c81b use value from head title in page titles again 166e735 CS-5606: Changes temp dir to project cache dir fd08e64 change parameter format to string 39da243 added api key handling to the embedly controller edfa7cd fix snippets sql for both upgrades and new installs c2e8911 Initialize loader even when translations files are cached 40d469a Revert "Aenv 495" 99d6650 updated translation resources 055e82c add embedly enpoint field to snippets for upgrade 6d233b4 updated translation resources 3c074da updated translation resources 7949c10 add endpoint field back to demo data for embedly snippet 9a6f9e7 TW-75: Adds parameter to sort articles by publication date ad29970 fix wrong translations labels 4ed0b78 uodate also install sql's b8d1a82 use default NULL instead 0 c560163 CS-5819 This capitalization does not appear in Newscoop source code d8474af make IdPublication nullable with default 0 76bb862 CS-5819 Update YML files for string modifications a308251 CS-5761 - "The last article of this list has been removed" is not translated. 22a6497 Buttons "Add this article" and "Close" is not translated in Playlist management d6931dc improved slideshows handling using API 106ac5f When using tpid parameter page can get into an infinite loop 13653f9 CS-5819 Clarify labels for Article Types 0e21216 reintroduce clearPlaylistTemplates calls 6175e3f improve playlists articles fetching with getArticle fde43db use arrayResult for fetching playlist articles ids, fetch real articles with getArticlesByCriteria 5400629 manual join needed article relations for api - it takes less time than left joining 49f6e8e replace our custom playlists articles ordering with gedmo/sortable 7b2b719 set proper limit 6381adf fixed articles listing on the playlist with the limit 9649dd4 improve removing left nodes, fix clearing Playlist templates, update order initializing script 83c2eb3 added script to remove not existing index 098f1b8 Adds correct way to update section_id in Articles table d2fc1e7 Fixes issues with missing or wrong positioned beginTransaction calls 67fadc9 fixed jms serializer version to work also with php 5.3 f67447d serialize objects in cache keys, use md5 instead base64_encode e23105a fix cache key for getArticle in CampURIShortNames 806a978 allow resseting article with this same number f50f389 fetch language 7185623 fix typo 67c92a3 Moves script to folder with date of merging PR to prevent errors f53efed Fixes issue with locale getting lost c25c2a4 TW-203: Fixes error with comment search service 8ce3899 added utcdatetime type to the upgrade script e090c8c added articles filtering by language in playlists 50d22e7 updated translation resources 700033f updated translation resources 04fb338 updated translation resources bfb57a0 updated translation resources eaf8808 IM-2792 - some article types are blank pages when opening them from backend after upgrade to 4.4.3 d57b96e improved auth-interceptor 2761544 improve sql script d1a6fbc remove webcode on article delete fc1c5f1 CS5784 - Playlists don't support many languages 26/05/2015 16:49 4.4.3 Newscoop 4.4.3 minor release 8c71179 add missing update sql, fix useForAll js function with tinymce 49c5d01 CS-5790: Fixes issue when images/files/videos/pdf folder is symlink 875aabd CS-5791: Adds more clear error messages when direcotires dont exist 626b349 translations fixes 0ab991f small fixes in default templates 5238fb2 updated translation resources 385a835 get locale from translator 8efc6a0 CS-5724: Improves upgrade script for TimeZOne 992fd17 hide the "show in editor" option in the article type fields for switches 15da820 CS-5724: Adds proper time zone setting for Newscoop ea73a2d add articles relation to Author table, fix comments api user checking, fix uri parameters in metaSubtitle (editor_image.tpl) 79e7d49 added ORM UTC datetime type and fixed playlists saving 9cbb0f4 fix metaSubtitle missing $request object, fix cacheKey usage d4b5c58 fixed typo 1af69e9 removed unused method 8411516 improved and fixed set_topic function 1487df2 use site secret key instead installation_id 51087c5 use new getLink method to create article edit links in admin bc43bb1 spaces format 716a2ae CS-5754 - Problem with topics 3f35817 clear vector after rendering 7291a14 add unique per instance installation_id to database cache keys 4189790 prettify oauth result page d9dd32e update main.css 928b491 added oauth login-modal style a6d77f4 fixed obtaining a new token bbe93bd wip playlists oauth 0b91820 improve connected articles listing on edit image view e2b40ff authorize user on frontend when signing in to backend 417d39a remove custom target path 9862d31 improved issue service a74aada remove 'parent' from password recovery template d18ac74 oauth token handling d2e75ec disable issue listener for api 504e392 users logout api - simplified the code 8a87d32 revert services.yml 076a55e fixed custom handlers 87f4303 simplyfy and fix webcode (re)generate command 5fba74d check if $publicationMetadata is filled 5fcec47 improve rendering templates from templates service c5843c1 add 404 response code for not found pages a0e47a5 remove unused encoder factory from UserService 7923750 use cacheService for acl resources scan 646d3c5 remove findBy and findAll methods f9ff851 ignore authentication oauth modal when session is valid 1dba319 fix comments ff13efd added no_cache cookie handling also on frontend a675ecb CS5777 - Create OAuth custom login & logout handlers df1553c by default hide hidden comments for not admins on api 2828d5c fix broken html source view in chrome de84a99 CS-5771 - Handle relative redirect uris for oauth clients 6b33911 CS-5658: add title for dashboard d125772 CS-5658: improve admin pages titles b6118f2 updated translation resources 96c291d S-5773: Fixes issue with upgrade which doesn't take mixed returned entities in account. 42987da fix login page title 5d6673f add and fix admin pages titles 7f53486 set attachment translations per language 08f294c CS-5761 - "The last article of this list has been removed" is not translated. aad55b0 Buttons "Add this article" and "Close" is not translated in Playlist management 416eea5 AENV-462 - Change name of button "Done" to "Save" in Attach/Detach slideshows 5375aa1 use tagged vendors, clone default_url for url property 02e30c8 share security context between api and frontend, update somposer.json 06a5375 TW-176: Fixes issue with unserialized array in cache key 82a8bdd removed check for token b080d76 added image width support b06d29e AENV-452 - Big image is not resized on front-end ca0da21 updated translation resources 459cd21 updated translation resources 5128a2f added upgrade script - update redirect_uris for defaultoauth client 06e3828 use real renditions url, add some details 5982184 move InteractiveDoctrineAuthService to onw file, fix multiple keywords search on api b93420f simplify oauth obtaining process e4b97fa override TokenBasedRememberMeServices and authenticate user also in zend_auth 8fecf4d updated translation resources 22/04/2015 09:35 4.4.2 Newscoop 4.4.2 minor release 921408c improve rmt config 73b3495 identations to spaces 1095f71 tabs fix in service 5193be8 tabs fix 327fad1 removed comments d3045ea CS-5751 - Editorial comments improvements 18d3552 remove not used files in 4.4.2 46912ea keep orginal order in search by ids bc127ac pass $onlyPublished to articles repository 730df98 one more relation usage replace b8c32cf check if smarty_function_uri before initializing 3a273b1 fix comments management and remove article relation from playlist_article entity 16/04/2015 10:27 4.4.1 Newscoop 4.4.1 minor release 7945847 add cacheId parameter for display method in render smarty function 89218e6 context_articles table change, cache key change 83d99f3 playlist order fix - new upgrade script 5be4796 playlist order fix - upgrade script cdfca8e fixed theme deletion 80d1f53 fixed redirect uri for oauth 1348379 fixed redirect uri handling when creating oauth user 541d3ca fixed path to login modal 2d7467c improve issue service 12f81bb expand info block by default and icon fix a00d8f6 fixed multiple images in edito mode - slideshows efe7795 fixed iframe width ofr support popup 0cdfaa8 removed duplicates from themes.en.yml 1b09f70 fixed playlist cache bugs a460d43 remove logs from travis 0b65524 fix section_id and issue_id handling in Article entity. 1dcafa0 fixed fancybox border 93baaba revert section/issue relation change 40b373c add dev.log to end of tests f5cfbf2 [big change] fix article issue/section relation, fix comments manager after change on thread property f71d3a2 fix comments ussage after change for thread property c2a7be5 fix handling xml content with single items, add comments d2b2498 fixed upgrade script related to playlists aea5908 rebuilt create view for slideshows to suit new design 9bccb33 improve docblock 003902f optimize accessDeniedExceptionListener 78a1843 AENV-330 - polish newscoop create/manage slideshow modal 8fbf4d9 [AENV-434]: remove endpoint property from embedly snippet template 9d1d375 CS-5745: Adds execute bit to scripts 88837e1 provide default redirect_uri route with oauth_result.tpl template file rendering 91d8c71 fix current cache driver cache flushing dd3976c don't use getArticleNumber from comment entity c9b182f change article_num ussage to thread when work with comment entity abf86a7 remove not needed files 7d9d68a allow posting anonymous comments when it's allowed in publication settings c23a160 destroy interval after it stops f6cb020 fixed editrial comments translations e983e1f added handling when token expires - added modal 8f4b878 improve editorial comments inicialization 4d5d823 optimized system preferences service ea5056c revert singleton for adodb in DatabaseObject 071bbb9 implement singleton for adodb in DatabaseObject 8944b53 do not use this in static 082e83e optimize DatabaseObject - don't fetch adodb in every function c0c07ad encode articlesModificationTime value eecc4ea add missing docblocks 61ca702 introduce support for theme playlists configuration, clear defined templates on playlist modification ae1b3d8 display 0 when no playlist limit is set 2e35933 added opera support to readme 3f3741f changed function comment 8076fc0 added handling when token expires - ported from aes plugin 7b6ad09 added handling when token expires - ported from aes plugin 6a1366e removed unnecessary comment and code form auth interceptor f0ff2e5 fixed bug in playlist modification datetime - ignored timezone 0039879 fixed search c06f7bf disable save and add to lists buttons when no playlist selected 740b9c1 clear temp list on playlist change 877dd9d CS-5707 - Define Newscoop requirements related to supported browsers 5473c6f CS-5744 - Move custom DQL functions to config.yml c5a7a73 check for array index before using it it install_conf, replace pear errors with exceptions in image class 41ece29 CS-5669 - update the Readme file to tell users about the issue with running Newscoop 4.3 on Debian with PHP version 5.3 8fefff5 revert strlower on images extensions 5c73ba0 fix endless loop in campcontext with tpid parameter in url a657566 cache seourlend in metaArticle 2d0bc76 fix MetaSection preventing caching empty objects ddab515 fix ArticleImage, don't cache empty object in metaSection 338f37b changed getArticlesByIds to getArticlesByCriteria function name 0cbe5ba AENV-445 - Related articles is not working by API 500 message 6124002 improve performance in ArticlesList, reintroduce caching in ArticleImage ccb2508 fixed playlists bugs - auto remove last item etc. b96a672 improve cacheService ussage in ArticleTypeField 2188811 remove duplicated code in MetaSection, improve cacheService in ArticleData eb365fa CS-5733 - change UI for the playlist revert alert 17ffd70 fixed creating article without issue and section via api 85e0d8f added description to article type form df57541 revert cache key parameter for article images list 71bc9d6 optimize public resources listener bc52f33 lower images extensions, optimize cache keys, fix articlemodificationtime in playlists e9953cd added authentication exception 6adfdce fixed failed authentication handling d9d7892 revert user check c2ea1ed optimize public_resources_listener ef480c6 optimize cacheService ussage 3632f0d fixed issue and section relationship in article entity - missing issue, section d618af8 handle current user when not logged in in comments 2799d21 Revert "fixed issue and section relationship in article entity - missing issue, ..." 9fe8a8e fixed issue and section relationship in article entity - missing issue, section 4f4a1a9 Adds support for using old style topic names (with locale appended) 83706ed performance fixes - catched on production 584f4d6 fixed proxy regeneration in upgrade scripts b35d902 update 4.4 upgrade doc a5809ee fix proxy regeneration for publication entity c9759c8 CS-4863: Removes ingest code from core, code from css and config files - Removes ingest rules form ACL table - Adds fake permissions for old auth a868d8e save wip 24/03/2015 16:08 4.4.0 initial release 2f8dd0f fixed proxy regeneration when already generated in upgrade scripts 34783f4 improve rmt config 734e5ed optimize search query 2bbad8f fixed loading more articles on scroll - afterlist save 1c3dad1 added track by 098b175 removed height from the editor image tpl so images can be disppplayed responsively 2d9f639 fix translation e3369b8 fix issue with dissapearing articles f9079dd display revert popup when adding article from preview 41937ab revert button fix f93f95f changed onEnd to onAdd events in playlist app e137cb6 Set new codename for minor release 268a8f5 updated translation resources f01cbe7 updated translation resources b5bcd71 add missing domain translations e921f3a fix typo in translations domain ea4421e updated translation resources ded1774 CS-5735: Changes find into findOneBy and catches exception if not found. e3840e7 fix admin menu under low permisions, update vendors b1fd64a CS-5732 - User can add into playlist same article multi times in FF 218582e CS-5731 - playlist limit alert "limit reached - should I revert" is not being triggered on firefox 068b04b Set new codename for minor release 0e93c9d set descending sorting in article repository 633d2aa CS-5709 - Playlist is not correct working with long list b153f14 updated translation resources c249df1 updated translation resources f0b167a added translation domain 4b5165f fix playlist limit when saving and fetching more articles on scroll d75258f fix limit d350920 added spinner when loading featured articles 6e800d9 disable proxy regeneration, laod other annotations 165b9d6 added spinner when loading featured articles ee75778 [CS-5729] add upgrade script for initializing playlists articles order, remove some not used files 7553d46 improvements to list saving 0ff18f0 disable proxy regeneration, laod other annotations ee78558 CS-5728 - Remove limitation from loaded playlist, load more on scroll when no limit cffecc9 Update BridgeController.php a2923f5 [CS-5720] Fix Insert/edit internal link 59e37d1 added option to not create default client in console command installer c5547a3 fix try catch for topics.php script c469078 fix renditions cropping with in implementation d81433a create oauth client when installing newscoop from console command bd35900 added fixed rss fields links to dashboard widgets a47652d mapping fixes 5144978 fix some of the not valid associations 09108b0 fix add_client.php script to not fail when diffrent files permissions 56e40bf CS-5721: Adds composer.lock for updated composer.jsont d18f1d7 Fixes issue e6410b8 catch Entity not found exception when topic's language cant be found a412c53 clear cache before adding oauth client 87e8574 CS-5721: Fixes issue when using <% or %> in templates with smarty 2ea50ba improved topics script 30a545f CS-5723 - AES is showing incorrect language for added topics 916cbd5 CS-5715 - Remove not used core files in 4.4 0ec87a8 updated docs 62f3414 CS-5718 - added and changed upgrade docs 4159f61 move editorial comment sql so the script can be executed 6d06f31 revert exception handling 2553179 fix bug in authors table causing: headers already sent issue 3b0a9ed CS-5684 - Front-end is not support correctly percent values from AES 9834873 CS-5642 - Article Editor removes the img tags for imported articles fb420df CS-5717 - fixed topics script 379b8f0 CS-5714 - Restore of backup is not working from 4.3.2 to 4.4.0 RC a060634 CS-5719 - DB query errors for dashboard widgets c4c2e4b CS-5717 - Integrate script which converts topics into Newscoop 37ef66b CS-5666 - Stop creating newscoop-indexer.lock in the root of newscoop instance 093a8e1 fixed topic unlinking - behat bb38717 require MetaDbObject class in MetaTopic class 93a560c CS-5708 - Add info how to install Newscoop from the console 00ccfde CS-5666 - Stop creating newscoop-indexer.lock in the root of newscoop instance 222220e added isset e755d0f Adds link to 'Add publication'-button, if no publications are available 27f927e added try catch block to getDefaultAlias function 9e94a10 fix documentation block for getServerOS in bug reporter de7c397 added php version and OS info to bug reporter 0862d1b clear 'topic' namespace 19a41c6 fixed image width for user image in comments management 807b0e2 added 'site' for backward compability a256d18 fixed subtopics list and added caching to it 4198d32 fix install plugins command 0efb477 remove request 33bbd59 throw exception when alias not found 008d056 provide default alias for creating oauth default client upgrade script 863979f changed preview function name 4c63ea7 fixed article preview for related articles 804a13f fix sections API, article translate url 6973425 CS-5713 - Namespace alias can't be detected in Topic service f3394db updated translation resources 71361e7 updated translation resources b4685fe updated translation resources e522575 updated translation resources 4014748 CS-5712 - Show popup when changing list name 00302f8 revert action improvements 56197f7 CS-5711 - Remove last item from the list with possibility to revert 47d84cf added alert, changed draggable placeholder, removed load on scroll 5ad70b2 changed DateTime parameter when locking, unlocking article 201dff5 AENV-428 - image captions not updating fc2743b updated translation resources 1a9f857 updated translation resources 07c0d62 updated translation resources 7b23a29 AENV-356 - Related articles is not showing correctly issues - added parameter 5deae2e AENV-356 - Related articles is not showing correctly issues 8269cc5 A proper merge of #918 into 4.3 df845a4 CS-5656 - Error in section articles API - languages mixed 68567b3 CS-5656 - Error in section articles API - languages mixed 9a9b367 removed wrong phrase in articles.en.yml 0bff89f updated translation resources 0bea33b Release of new version 4.4.0-rc Version 4.4 - Newscoop 4.4 Release Candidate 1 04/03/2015 12:01 4.4.0-rc initial release Version 4.3 - Tag Newscoop 4.3 stable release 23/01/2015 11:35 4.3.2 Newscoop 4.3.2 minor release (bugfixes) 28/11/2014 14:46 4.3.1 "Newscoop 4.3.1 minor release" 06/11/2014 09:21 4.3.0 initial release Version 4.3 - Newscoop 4.3 release candidate 17/09/2014 13:53 4.3.0-rc initial release 6d600e6 update rmt version in composer.json baa188e updte rmt config, update vendors before release 20550b1 make 'public' folder writable during Newscoop installation ad2461f CS-5488 - Missing text "Back to Article Types List" in Article type fields b23fd52 updated translation resources 3e7e54a text/blog can not have default value in older versions of mysql 61b8dca CS-5503 - Upgrading Newscoop from 4.2 -> 4.3 issues a59abaa add sendmail to recomendations 9895fc2 use insert ignore instead try catch 267debb replaced variable with null in GenericEvent when setting user points 09e4433 CS-5497 - Newscoop installer strings 8bd4464 CS-4726 New Installer design - improved errors displaying c8a3e9b CS-4726 - New Installer design 905bcd1 ignore existing index in cache insert d7a6b5c (CS-5496) Move templates service from classes construct f2fb3a5 updated translation resources 1295d81 updated translation resources 0430c77 CS-3121: fix ignore_language, fix seting language in campcontext 06c39e6 show smarty errors on dev only 916c2c4 add sentry channel to dev and prod, log with exceptions 382626c updated translation resources b2b49ce revert articles_list caching - better keys (based on context) are needed 667d792 remove broken google gadgets widgets 35f5dd1 update composer files (new monolog) 3fc4312 use custom monolog chanell for sentry logging, setup errors handler on legacy code 227324a updated translation resources 6a931cb update composer.json and lock files 39de14a Revert "Revert "[CS-4762] Fixes missing Georgian file for jQuery datepicker"" cd58bc8 CS-4849: Fixes issue with placing description as image text e64d370 CS-4849: Removes debug information 906a513 CS-4849: Removes unneeded line of code. 7a4523d CS-4849: Adds newline and retrieves language from Request instead of cookie 2d9f52f CS-4849: Adds newline and retrieves language from Request instead of cookie afacc89 Setup Newscoop Community Sentry channel, log legacy errors to sentry. 7c69d07 Add posibility to check if plugin is installed and enabled from template ab2b24b updated translation resources 383acc5 CS-4752 - topics hierarchy overlap on topic deletion 31f47ff updated translation resources 83d3113 fix article image captions screen aeaa2f4 fixed translator params for listing issues 41144d2 fixed translator params for listing issues 7e741ac updated translation resources 1d4bf22 updated translation resources fda8b4a updated translation resources a83a711 updated translation resources 1090e8e updated translation resources 178933d updated translation resources 784ea2f updated translation resources 3c1129d updated translation resources b8b6912 updated translation resources b5433d0 updated translation resources 8add851 CS-5446: Replaces putGS with translator c62e52e CS-4849: Renames variable name 103e055 Revert "CS-5446: Disabled 'add article_type' button if viewing all fields (with no article_type selected)" 4b9f028 Revert "[CS-4762] Fixes missing Georgian file for jQuery datepicker" 4b1753d CS-4849: Implements rich text captions 8de6a9b WOBS-1105 added dynamic block for editor_image.tpl dbff717 updated translation resources ca570c3 CS-5403 Fixes corruption in the Languages, Countries and LocationContents tables 527af29 CS-4849: Adds rich text captions preferences a43ce8c add upgrade message da75c54 added method to remove system preferences from database f6956b2 [CS-4762] Fixes missing Georgian file for jQuery datepicker 0e53d67 CS-4690: make dafault path as empty string instead null 8505a35 CS-4690: fix api user image link, add getBaseUrl method to linkService f0432d1 WOBS-3390: missing image description in aes media box ba93ae8 updated translation resources f56d914 updated translation resources 083203c updated translation resources 6ea79a5 fix article move action 6fb53e1 updated translation resources a3aa28b updated translation resources c43e1b2 CS-5477 Armenian code has changed from hy to hy_AM e166851 CS-4911 - Delete author biography 82926a7 improve lists caching 6c77b9a optimize console commands to not output alerts by default when commands are executed 8c1064f updated translation resources 2b6f035 CS-5408 - Support is not working on newscoop backend 583d41b image zoom link improve (WOBS-1105) 624e02d returned error message (WOBS-1105) 93d8506 WOBS-1105 - make all images with width more than 1000px enlargeable on click 99380d8 updated translation resources dbd0050 updated translation resources fd563ab removed dump 69f71a1 CS-4887 - Multiple localization bugs on theme management page ee471aa CS-5472 - Resources directory contains obsolete translation strings defe107 CS-5439 - Typo in Newscoop smarty string e0bda6a CS-5479 - Typo in background jobs string 0a84eb8 improved crontab.php script c84c9a2 updated translation resources 588de12 updated translation resources 01a2cf6 updated translation resources d88aac0 added details url for cron jobs 4ef803b added sorting to status and notify columns in cron jobs table 7b9349d added log:maintenance cron job eae1eba CS-5459 - added displaying author name also to featured article lists efbee96 added 302 status to API documentation 9363292 scheduler command fixes 48e7595 upgrade cron jobs upgrade script f0c83c6 fixed typos 32c7fb1 added email notification for cron jobs in system preferences eb3e3a2 added email notification for cron jobs in system preferences 9ab0058 CS-5434 - improve password recovery 47f4b5f CS-5459 typo c5d5af2 CS-5459 - display author name in related articles interface a871e29 updated translation resources d9f1ebf WOBS-3382 - comments deactivated by default for some blogposts 6058baa added 302 status code in user login API when _target_path param is given d83c7ff [CS-5475] Manage background jobs via backend fa9efb7 Lets the menu correctly show the URL if it's a dropdown element cf2b99c updated translation resources a0693fd WOBS-3381: Replaces manual check if webcode exists with internal getWebcode() method a0e4d0f updated translation resources c72f047 updated translation resources b4516c0 Changes the URL for redirecting to the Plugin vs the old Edit screen when creating a new article ea45f37 CS-5446: Disabled 'add article_type' button if viewing all fields (with no article_type selected) Version 4.3 - First Newscoop 4.3 alpha, released with liip/rmt, close to code freeze, first weekly release, enjoy 28/07/2014 13:41 4.3.0-alpha3 fix broken alpha2 release (missing comma in last commit). 99aae92 fix missing comma in login api 28/07/2014 12:56 4.3.0-alpha2 Newscoop 4.3-alpha2 weekly release, performance fixes, support for _target_path in api login, fix for serbian language, ui for article image captions, updated translations 9390282 update rmt release script 557b6f5 update lock before release 0e508c5 Merge pull request #773 from takeit/redirect 377a907 WOBS-3380 I am not redirected to the form to enter a classified, but to /dashboard 4d0ada7 updated translation resources 88d6589 updated translation resources 5b844ca Update rmt to latest version 2929573 Merge branch 'danielhjames-master' 4db0b3b improve menu translations a449e15 Merge branch 'master' of https://github.com/danielhjames/Newscoop into danielhjames-master 5d19590 updated translation resources bf0c52a Merge pull request #772 from ahilles107/CS-5086_article_image_captions 48a59d7 updated translation resources c07bb04 CS-5086: introduce article specific captions and keeping image description 286fb3c Merge pull request #770 from ahilles107/master f8e22f1 fix creating object_id in article 5d91f0a clear article image cache, fix namespace 67763e4 clear article image cache 4ee2e07 Merge branch 'master' of git://github.com/sourcefabric/Newscoop 43f7338 clear comments cache after chnaging status 89e51dc updated translation resources 3552fae updated translation resources 3572587 Merge pull request #768 from takeit/master 5d1e67c update symofny2 to @dev 7dcca36 Merge branch 'master' of https://github.com/sourcefabric/Newscoop 36d0b2b Merge pull request #766 from sourcefabric/revert-765-articleTypeExtension 98b66da Revert "WIP: Extends the ArticleType adding a showInEditor option" 33eb1c8 Merge pull request #765 from terwey/articleTypeExtension 721afa5 Extends the ArticleType adding a showInEditor option 1281680 Merge branch 'master' of git://github.com/sourcefabric/Newscoop dc21dad Merge branch 'master' of https://github.com/sourcefabric/Newscoop 37a73c1 Merge branch 'master' of https://github.com/sourcefabric/Newscoop 440ea5c Merge branch 'master' of git://github.com/sourcefabric/Newscoop 01ef46d Merge branch 'master' of git://github.com/sourcefabric/Newscoop 38239c4 Revert demo data file, it is corrupted (CS-5403) 6da4b0f CS-5415 Eastern Armenian corrections and short month/day names, thanks Mikayel! 3b519bb CS-5415 - corrections for Eastern Armenian e303e76 CS-5415 Add Armenian support to Languages table on install and upgrade f611d55 Apply CS-5418 fix b967ec2 Apply CS-5404 fix and correct Azerbaijani weekday names 6afa590 Corrections to Azerbaijani days of the week 7e89527 CS-5398 Add Danish to Language table when upgrading 1222c8d Merge missing month and day names from 4.2.x branch e236c41 CS-5398 Add Hungarian, Danish and Azerbaijani to core SQL f1b3f58 CS-4603 Correct code for Serbian Latin is sr@latin 17/07/2014 22:28 4.3.0-alpha initial release c8e45e9 move RMT to newscoop dir 4bcc122 Merge pull request #764 from sourcefabric/pre_alpha_fixes 974f7ec update composer 0804611 fix plugin manager - enabled/disabled method 709f59f Merge pull request #763 from terwey/editorBundle cf4691a Merge pull request #761 from ahilles107/plugins_fixes 32b0372 Merge branch 'master' of https://github.com/sourcefabric/Newscoop ee3573d Merge pull request #762 from terwey/pluginManager 8c21b2e remove unwanted comment 758bb52 Implements a rudimentary way to check if the AES plugin is Enabled, if so, use a different URL 2b7d80e Removes the unneccesary intval 5ece6d9 Merge branch 'patch-1' of https://github.com/acalisma/Newscoop 30dd7b8 improve install sql, fix issue with not existing publication e0016cb Merge pull request #760 from ahilles107/performance 97ed06d don't cache user object - it's serialized only with id, fix caching has_topic 5fe2578 Merge pull request #758 from ahilles107/protect_dirs ead17a2 deny access to logs and cache directory aad748b Merge pull request #752 from takeit/master d124619 Merge pull request #757 from takeit/v4.3 19129ca composer.lock fix update c392a92 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into v4.3 875a223 Merge pull request #742 from ahilles107/performance_3 933a490 fix fetching user from metaauthor 144eaaa clear comments cache on comment hide cf1c2cc Merge pull request #719 from snurolss/master a6c9fa0 clear chace after modyfing article property 7ba5511 improve cache clearing for comments dd8eda1 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into performance_3 25318b8 improve cache clearing c0b8245 Merge pull request #754 from ahilles107/master 2764ef7 Merge pull request #756 from takeit/installer adaf1c3 autoId table fix when fresh install cf8f28f autoId table fix when fresh install 1d4a693 Update MetaArticle.php e7338dc updated translation resources e355fe8 updated translation resources 1656fb4 add url, issue, section to article resource in api, fix playlist articles resource, fix statistics collection popup 0c1e205 fix cachekey in ArticlesList 72b11b3 fix wrong var name, add lock file eff39d8 move secret key and installation id to install process 90b2350 Merge pull request #753 from m038/WOBS-2944 cd7f2ca WOBS-2944: Updates time_updated field for articles when toppics are changed ccc346a oauth2 command change 7a4aa45 updated translation resources 43fd8f7 access token from CLI fix 1f7b6c2 secret key fix cffe294 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into performance_3 9df5260 Merge pull request #751 from takeit/master eca40d6 remove line fe39312 README.md update ce4be60 behat fix 35bcd48 composer update 812fcf3 fix cache key in theme translations listener 3f877ad Merge pull request #749 from terwey/jsRouteFix 2042c19 Merge pull request #750 from takeit/master 23f7754 removed not used notification controller and improve upgrade script for cli b9139c2 add cached objects clearing f467dc3 Merge pull request #744 from takeit/master 47f8f31 specs fix ddb3cba revert 5b91642 final CLI Newscoop installer fix 2 4a236b5 final CLI Newscoop installer fix a917b43 updated translation resources 1484d9c oauth tables fix b48fb38 oauth table fix f135085 Exposes the oAuth Route 5f095d3 fix authorize controller b70d4d1 fix 47ab1d0 strict standard fix b910204 typo fix d7010d9 authorize form fix 7be9a75 cahce fix 82917c1 Merge pull request #748 from terwey/jsRouteFix 6ce7946 Exposes the newscoop_gimme_comments_getcommentsforarticle_1 route 9de9c63 cache fix try f1cf069 Merge branch 'performance_3' of https://github.com/ahilles107/Newscoop into performance_3 3248df9 fixes when using CLI 76f64d6 travis recheck 2 a20e302 travis recheck a77353f updated translation resources 72ca07d travis another test 011ca5e Merge pull request #747 from terwey/jsRouteFix 2c28054 The order is important to Route, this corrects it. 74c018f travis test3 84160a9 Merge pull request #746 from terwey/jsRouteFix 76b6aff travis test2 b645620 Properly quotes the word expose da98c6a Merge pull request #745 from terwey/jsRouteFix ea96f5f Unexposes the DefaultController c8982ed Unexposes the ConfigureAPIController 5bcf3ee Adds the expose=true option to the Route because the routing.yml from FOSRestBundle doesn't leak this information through to the JSRoutingBundle 1328a3d travis test d440dc0 updated translation resources 2b3d55f travis check 92953b1 fix 659e89b install assets fix 8ef76f4 Merge branch 'master' of https://github.com/sourcefabric/Newscoop 717dcaf travis revert e0e8b2e travis check2 fc763c3 travis check fd5521c fix 35baa63 install guide improvemement c5b9048 fixes f51be49 install doc update 46bf6a8 ubuntu documentation improvement and installer fix 7b01380 Merge branch 'master' of github.com:sourcefabric/Newscoop b9a7080 fix user points, disable caching on cli for now a93ab54 updated translation resources d16726c updated translation resources e0a4230 newscoop ubuntu install guide improve c01d18c doc image fix 879e184 Merge branch 'master' of https://github.com/sourcefabric/Newscoop e9012f6 installer fixes and documentation 30b11f3 Merge branch 'clean_performance_improvements' of https://github.com/ahilles107/Newscoop into performance_3 d28891e some fixes 0078fbc Merge pull request #740 from takeit/master 16b31cf get rid off dispatching unused events cb0e494 CS-5455 - JS being loaded twice 4f0aa76 added dot 67c7b76 hide comments status bar when no comments 6888a4e revert to master d0ae62b Merge branch 'master' of https://github.com/sourcefabric/Newscoop b1aad08 CS-5055 - Numbers of comment is showing 1.,2.,.3, even user is on the second or third page of comments list 23fc539 updated translation resources fdc64cf updated translation resources 21ce7ce Merge pull request #729 from takeit/master c4c321c Merge branch 'master' of https://github.com/sourcefabric/Newscoop 9f6219a Merge pull request #738 from takeit/points e1c1487 user points fix when no connection between author and user 55cae5c assign author to user if its not assigned to properly count points d2801cc assign author to user if its not assigned to properly count points 9fdc9a8 Merge branch 'master' of https://github.com/sourcefabric/Newscoop d61ba45 Merge pull request #737 from takeit/points afb030d WOBS-3326 - Hidden comment is a part of points in profile c497fad remove diplucates from authors search 95f9d27 WOBS-3326 - Hidden comment is a part of points in profile b31387b remove diplucates from authors search dda5c4e Merge pull request #736 from m038/WOBS-3327 de0593b WOBS-3327: Adds parameter status to list_user_comments a6130a9 remove uneccessary methods from installer 46333e6 fix cs 63f5e54 CS-5445 - Simpler Installer e3053ff installer first phase 4f9a063 updated translation resources 74c9e9e Merge pull request #734 from m038/CS-5033 fc0d872 CS-5033: Fixes typo ee83ecb Merge pull request #733 from m038/CS-5033 8b9485c Merge pull request #732 from m038/CS-5432 6292d02 CS-5033: Adds functionality to use specific protocol in smarty aba106e Merge branch 'master' of https://github.com/sourcefabric/Newscoop 6e08ffd CS-5432: Adds searching for full name 600d0bd updated translation resources 0e04f53 Merge pull request #731 from m038/CS-5444 0319449 CS-5444: Changes tagged version to one corresponding with previous commit hash (2.1 doesn't work) 481195c updated translation resources 8bdfcf1 Merge pull request #730 from m038/CS-5444 0d637df CS-5444: Fixes issue with missing composer depedencies 62807d4 fixes f8e2fa5 Database override message alert shows up in next step, should show up in /install/prepare 350a407 travis check v4 f762da1 travis check v3 ebb9244 travis check v2 3c428bb CS-5432: Fixes translations and displays 20 instead of 10 results in select2 autocomplete eb45dd0 travis check 0953ce1 CS-5432: Fixes indentation 857404e CS-5432: Set mimimum of search characters to 1 e0b014d CS-5432: Fixes translation domain typo 5205f86 Merge remote-tracking branch 'upstream/master' into CS-5432 4d07639 CS-5432: Adds autocomplete functionality for topics, authors and creators in universal search 0600c4f When overriding already existing database the Integrity constraint violation occurs d801898 fixes 70c3b6e Invalid catalog name: 1046 No database selected fix 4f05ea3 updated translation resources b3c683d updated translation resources 3628497 merge fix c0a63e1 resolve merge conflict 2ca0d9e Merge pull request #728 from takeit/sql-optimize 23b3a08 Merge branch 'master' of github.com:sourcefabric/Newscoop 003f21e Merge branch 'CS-5413' of https://github.com/terwey/Newscoop d23f03e updated translation resources fa6de54 user points fix for authors 08c53a5 user points fix for authors 6929da9 Merge pull request #685 from terwey/patch-5 daa280b Merge pull request #667 from ahilles107/CS-5332_author_related_resources c79b3c2 Merge pull request #727 from ahilles107/fun_friday 3a5a39d Merge branch 'sql-optimize' of https://github.com/takeit/Newscoop 35c07e1 Merge pull request #708 from takeit/v4.3 c611367 documentation block fix 5d4ee2b remove comments a3c3cc2 add/remove user points also for authors of the articles 753384d Merge branch 'WOBS-3298' of https://github.com/terwey/Newscoop f7633b8 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into sql-optimize 408d15f updated translation resources fb15f38 Merge branch 'fun_friday' of https://github.com/ahilles107/Newscoop into v4.3 fb7f3ed add short stats for dashboard 8d32f5a Merge branch 'master' of https://github.com/sourcefabric/Newscoop 853c1f7 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into v4.3 9ae1fb9 remove points when article is deleted 11f8a5f user points fix if d0375b2 user points fix 7bc0aab CS-5432: Optimizes backend universal search by only loading lists when filter is selected by user 146b8b7 updated translation resources c4c4bf5 updated translation resources e28bf92 Merge remote-tracking branch 'upstream/master' into CS-5432 e67f94f updated translation resources 613966e Merge pull request #725 from ahilles107/fix_performance b4e1544 small fixes already done on tw production c68e88b Merge pull request #714 from m038/CS-5033 884f0f1 userlist fix 1a78dd7 points fix eb7e7af merge fixes 3ae8868 Rewrite/Optimize saving users points v2 16d6d3d Merge pull request #723 from ahilles107/fix_performance d990395 CS-5435 - Rewrite/Optimize saving users points 6e342d9 Merge branch 'sql-optimize' of https://github.com/takeit/Newscoop into fix_performance ae3e5fb small fixes 5647c9d apply most important cachings and clearing in respective actions 4cc0f71 merge fix d5aecfd merge master d8c8bb5 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into sql-optimize 89e997c Merge pull request #716 from ahilles107/fix_performance 12d7a37 authors fixes 2b330a3 Merge pull request #2 from m038/CS-5432 4eaa37f Merge remote-tracking branch 'rafal/sql-optimize' into CS-5432 7740bc4 CS-5432: Merges methods and adds parameter for users results cf909c5 CS-5432: Adds method for only retrieving authors 555ee8b authors fix d2320fd permissions fixes 6216131 Merge branch 'master' of https://github.com/sourcefabric/Newscoop into sql-optimize 9ad3000 CS-5433 - Adding authors to article overloads c2bf511 updated translation resources 79a287f Merge pull request #720 from takeit/sql-optimize bc72ba9 CS-5033: Refrasing of system preferences text e195999 CS-5424 - [slow query] very slow articles query 8aaa3ee CS-5033: Removed comment on advice from Paweł dde5e89 CS-5033: Makes comment more consistent with preference name bca9085 Update ContainerAwareUnitTestCase.php 9a4f75f Update FieldsHandler.php 1825ff6 remove ordering by points on the fly 9df3638 Update post-install.sh c8ecce7 Update phpunit.bootstrap.php a007407 Loops through the groups if multiple 24de91a add temporary users_points updating f12b2de remove distinct 67f7f4c Merge pull request #718 from m038/CS-5424 3e3b609 improve users listing f0fe82f updated translation resources f64507c CS-5033: Adds methods in template engine classes for protocol relative urls 1cbd8c9 Removes the sub-query to improve speed f4911c5 Merge remote-tracking branch 'upstream/master' into CS-5424 59e03db CS-5424: Adds index to Id field in KeywordIndex table d1d627b Removes the DISTINCT from the COUNT query, there can never be multiple returns anyway db34ffe Merge branch 'master' of https://github.com/sourcefabric/Newscoop into v4.3 d39f9bd access denied message 3bf9951 fix countByUser function queries dc5e277 Merge pull request #715 from terwey/WOBS-3298 e8042dc access denied exception listener 9c77a42 Fixes WOBS-3298 1c55bd4 CS-5033: Adds SmartyUseProtocol system preference to upgrade procedure 26a4b7e CS-5033: Changes service name and changes smarty parameter to be consistent with system preference a0d28f7 CS-5033: Adds systempreference for protocol in Smarty generated urls b0c8859 CS-5033: Adds option to disable protocol for generating urls d760488 CS-5422- Backup / restore scripts are outdated and doesn't work properly c5d85af Merge pull request #712 from ahilles107/fix_performance 2b7cce3 improve sections caching a60c17a improve sections caching ab4e9dd remove plugin permissions when uninstall plugin action is taken cb426fd cache only filled sections list 75aafa2 Merge branch 'master' of github.com:sourcefabric/Newscoop into fix_performance 1442bfb updated translation resources 20f3bef Merge branch 'master' of https://github.com/sourcefabric/Newscoop into v4.3 e4d9ddb fetch only given plugin permissions instead of all plugins permissions 3a09654 disable buggy templates checking 390ef48 updated translation resources 2e77cd1 updated translation resources dd2b355 table alert, twig extension for permissions 86fc20e Merge pull request #711 from terwey/CS-5411 4e12cc1 plugins service fix 80f635e Fixes the ShortURL problem b389fcc updated translation resources 683a830 Merge pull request #706 from terwey/CS-5411 5742b88 setting up plugins permissions in backend 05db143 [api] fix update of article-author type 9f68024 fix authors reordering f638613 CS-5410: use 404 code for responses without items c699d25 doc block fix 6df0aab doc block fix 7a1a2a3 [CS-5401] reorder article authors after removing one 4a45e55 updated translation resources 60fc6b7 Support for new plugins permissions (ACL) a4428a5 merge 01d7165 Support for new plugins permissions (ACL) 5858867 Clears the cache for the Attachment CacheKey a400be2 Bugfixes d0b1a26 Caches the hasAttachment() result in the MetaArticle and the ArticleAttachmentsList 44a2647 Caches the has_image in the MetaArticle a0abb16 Caches the MetaImage 926361f Bugfixes 6930fa4 Bug 5694042 Caches the ArticleImagesList b834779 Caches the ArticleImageIndex d905ef6 Caches another MetaImage object 010c972 Fixes a small bug in caching the ArticleImage e4ae2ca Caches the MetaImage for the Article e5b82f5 Adds a namespace to the ArticleTypeField cachekey c374a8f Adds a namespace to the OutputService cachekey b41fb3a Caches the CurrentIssue 5f05e4e Fixes a bug where an array is included d64ab58 Implements a __toString on the ComparisonOperation object 0ed232f Caches the Themepath for the Issue e6d7ba9 Caches the IssueThemePath 4b97055 Caches the Publication inside the MetaArticle's getCommentsEnabled a74be11 Caches the sectionList b052625 Also cache the Issue if a name is known 99f7db1 Small fix 7401ca8 Fixes a bug where in GetInvalidURLTemplate the cacheService was undefined fdbaa6f Clears the cache for the Publication, Alias, Issue and Section objects 0edba49 Caches the WebOutput Issue information 23524e8 Caches the GetCurrentIssue, GetSection and corrects namespaces 105302d Caches the GetIssueTemplate and GetSectionTemplate in the CampSystem 444aef6 Caches the GetCurrentIssue and MetaIssue object 074767a cache objects in metaclasses 331d243 implement database cache to most used objects e3a4000 revert camptemplate 251dff1 improve translations listeners d412e65 Don't fetch all plugins one by one 59d4b67 Merge pull request #13 from terwey/optimise 1498690 Merge pull request #703 from m038/CS-5404 1bcb798 updated translation resources 2a2bba6 Caches the Template Cachelifetime inside the smarty render c548da1 Caches the MetaImage 9e89c61 Caches the Templates Cachelifetime f3b32a4 Caches the Template cacheLifetime 7e0c0df Caches the metaBoxArticlesList 96a416f Fixes a bug in the IPAccess caching 2ba861e Clears the cache for the Attachment CacheKey 3f2d7cd updated translation resources 8564db1 caches the Article in the MetaArticleBodyField c4c9f6d Caches the ArticleList in the block.list_articles bb9be4a Caches the Articlelists 58832e7 Caches the MetaUser for the MetaAuthor 26c9ff4 Namespace 5384906 Caches the counting of comments d878859 Caches the has_topic 3bd9e13 Caches the ArticleTopicList 16b17b5 Bugfixes bffbbb1 Caches the MetaTopic 40f64ff Caches the Language object inside the smarty_modifier_camp_date_format 4cfe179 Caches the has_image in the MetaArticle 18b73c0 Caches the CurrentIssue e4eaab2 Caches the Authors c2bccb1 Caches the IPAccess information 9004f90 Fixes a bug where an array is included f821689 Implements a __toString on the ComparisonOperation object c25aa22 updated translation resources f124522 updated translation resources e2d012e Merge branch 'master' of https://github.com/sourcefabric/Newscoop f2abcf2 Caches the Themepath for the Issue ab269f6 CS-5404: Removes values for id field 412c7ad Caches the IssueThemePath df2c40e Caches the articleTypeObj 57a145b Caches the sectionList b8f1549 Caches the ObjectType baba9b8 Caches the ArticleTypeField 2e9ea1c Also cache the Issue if a name is known 454115c Caches the hasAttachment() result in the MetaArticle and the ArticleAttachmentsList 31c5060 updated translation resources 88fa297 Small fix 32613a5 Merge pull request #700 from takeit/v4.3 e5cfd9e regisster controller fix 10a970d updated translation resources 83372ef access token fix c7d0032 access token fix f5ee732 updated translation resources 0a13187 updated translation resources be040d4 updated translation resources 90101b2 Fixes a bug where in GetInvalidURLTemplate the cacheService was undefined bb5eee6 Merge pull request #692 from takeit/v4.3 7ac687f merge tw-temp to master 3ee6883 Merge pull request #696 from takeit/temp 2f3b5cf logout from zend 2627fb3 fixes 7346873 logout handlers 45a22d0 fb login fix 5d9276b add clearing cache for objects modify actions 69b5132 Bugfixes de0ef96 Bug 1603826 Caches the ArticleImagesList 8045985 logout handlers 658f2d6 Caches the ArticleImageIndex a160ea9 Caches another MetaImage object 1354266 Fixes a small bug in caching the ArticleImage 3ff2df6 Caches the MetaImage for the Article 6ef006f Merge branch 'optimise' of https://github.com/terwey/Newscoop into clean_performance_improvements dc8b2a7 Caches some more objects in the CampSystem 2a710c6 Adds caching to the ArticleType 12b6610 Merge pull request #695 from takeit/temp 2a22c8e added public resource route f6a067a Merge pull request #694 from takeit/temp 9aaa650 typo fix 82a09b0 services.yml update 4a697f0 services.yml update 004b3d6 Merge pull request #693 from takeit/temp 2d4dabf frontend success logout handler 7c78b26 frontend success logout handler e553c9e removed curl, replaced by symofny request -response handle e6599bf removed curl, replaced by symofny request -response handle ff284ba duplicate property assign removed e703441 call frontend success handler via API 2bf670b fixes 77b8088 Merge branch 'master' of github.com:sourcefabric/Newscoop into v4.3 de61548 fix 57df494 Implements caching in the MetaArticle f2ea5de call frontend success handler via API f2d0daa Implements more caching 6ca0e86 fixes 509eb82 Removes the old CampCache and implements the new Caching mechanism in the CampSystem e0a6968 Adds more caching to CampURIShortNames c07054a removed listener not implemented yet in tw-temp efcd805 api doc fix bd8bfdb oauth cherry pick e6a4137 cherry picked c6fdb45 Create trusted property for API apps 3ca2875 cherry pick fb9deea added route to trusted & fixes a6bff36 Adds caching to the ArticleTypeField 3a32e5e Merge branch 'tw-temp' of github.com:sourcefabric/Newscoop into temp 596b617 api doc fix 640da8a Getting user access token by API and automatically log in to oauthprovider 24b73a9 More descriptive keys for the caching 88fbfa1 Fixes the serialization and unserialization of the Object 4fe1246 Caches the Language Class object df35fe5 Fixes the loading of the 'legacy' Language at the source b228c24 Checks in the Language class if the languageCode provided is Legacy and then returns an empty array 586f230 updated translation resources 9d4f38d Merge branch 'master' of github.com:sourcefabric/Newscoop into clean_performance_improvements 2a0683f updated translation resources c1c013f Create trusted property for API apps f811de8 WOBS-3261 - Adding new client for api access doesn't work 3e56daa Implements the cacheService for the MetaAttachment 21eba07 Implements the cacheService for the MetaLanguage f21c4e6 updated translation resources 69737cf cache objects in metaclasses 859a82b updated translation resources 901c491 updated translation resources 029ba32 updated translation resources 701a0a8 implement database cache to most used objects 9fbbbaf updated translation resources 9380710 Merge pull request #691 from takeit/v4.3 a2f18c0 WOBS-3258 - TW: Attachments should be automatically approved in media archive again d3caabe updated translation resources dbd220b revert camptemplate 07dc467 improve translations listeners 38b02de Don't fetch all plugins one by one 7f1ed64 Merge pull request #689 from takeit/v4.3 bec1381 merge fix 051746c set up user address properties 1365088 changes needed for memberships support 23d11c7 updated translation resources 9f9e9b8 updated translation resources b417402 [api][docs] improve docs 298e387 [api][docs] improve docs 080a5f7 Merge branch 'master' of github.com:sourcefabric/Newscoop into CS-5332_author_related_resources b4b47f9 [new_api_resource] add checking order parameter 5cf3fd6 [new_api_resource] implement articleauthors sorting c92e1c2 Merge pull request #687 from danielhjames/master 813f2ab Fix broken link to wiki 26df764 Merge pull request #686 from ahilles107/oauth_remember_access 4a5d665 [api] add missing create tables 6aa4c60 [api] remember user access for client e36e83c CS-4908 5397816 Merge pull request #684 from takeit/v4.3 13838a8 Merge branch 'master' of github.com:sourcefabric/Newscoop into v4.3 ac7e40c CS-4874 - Add / at the end of folder name in htaccess template file & CS-5368-Restore of backup is brake on back-end or terminal 7a4abda Merge pull request #681 from ahilles107/CS-4688_duplicated_sections 2256ba8 Merge pull request #682 from ahilles107/CS-4691_slideshows a342a0f [api_resource] CS-4691: Slideshow hasn't attribute for source of image/video dcad2c6 [api_resource] revert public to protected 0a96fbd [api resource] add publication name and issue name to section response 1889e88 Clear cache before using db with command, add real error output. f170a21 Merge pull request #676 from takeit/v4.3 cb04a80 assign theme improvement 43a5365 improve assign theme command to assign selected theme a0b931b languages fix in demo table 2e031ca description fix abe8930 hungarian and az languages 877eeb9 CS-5334 - Upgrade SQL needed for new localizations 3fc3937 CS-4899 - Install process is not working 8a86b12 http_response_code fix and remove community ticker from demo data as it causes some problems 311e434 added demo data to community ticket table 382666b Merge branch 'master' of github.com:sourcefabric/Newscoop into v4.3 3c9e3e3 changed info to release 73062aa added community ticker table structure to demo data a8fbfac alias fix dd621e9 revert a76d575 README update 6ddef6f release fixes 157ea4b add default site alias bb1d20c Merge pull request #677 from ahilles107/CS-5328_better_error_pages 0416dac CS-5328: convert tabs to spaces 9f6d63a CS-5328: On newscoop side error the http code shouldn't be 200 to avoid caching by proxy c5b1a30 command name change 3f9549b remove em in fetch publications command c5448e2 console command to fetch publications 9141212 fixing typos 4f6b9bb fix templates installer 40b1ea8 [api] Get pagination only when exists. d766767 demo data 869f08a [wip] prepare sorting 4e4ecb1 CS-4944 - Installer fails as users table is missing 4f69dd3 merge tw-temp to master d609945 Merge branch 'master' of github.com:sourcefabric/Newscoop into v4.3 f61fdbd test 240fdd1 remove pagination from array a18ceec revert pagination for article images. 32c7e6c Merge pull request #671 from takeit/temp 6720ab3 [new_api] CS-5332: unlink article author from article 65a971b [api resource] CS-5332 add article author type update 03188ed [api] CS-5332 - add authors search 8589c80 WOBS-3215 - Invalid security token is showed during attach images process after life time 331a275 [api] CS-5332 - add authorstypes and articlesauthors 3e646c8 Merge pull request #670 from takeit/temp c718d59 attach topic on enter button fix - dont do anything if no topic found d43e28e Merge pull request #669 from takeit/temp 2be7621 attach topic on enter hit, don't add new one bb6c0ab Merge pull request #666 from takeit/temp 120a074 add missing resources proposal cfc97a3 authors resources 664e260 Merge pull request #659 from ahilles107/plugins_manager 5a8a598 [WOBS-3211] - Article editor is showing Fatal error after life time 6531d84 added more fields for original image in image block 7eb84a8 added more fields for original image in image block c511275 Merge pull request #663 from takeit/temp 84a445e user profile fix ee2f2df fix author route name. e062b38 Merge pull request #662 from takeit/temp e0439b1 Merge branch 'tw-temp' of github.com:sourcefabric/Newscoop into temp c2d9f1b extend session lifetime form input to enter max 24 hours 009c71b Merge pull request #658 from ahilles107/api_docs c0446bf [api_docs] fix error handling in article types and articles controllers b3081b9 [api_docs] add api docs to missing controller 1028268 Merge pull request #657 from takeit/temp eb580db fix a3425ba authentication listener fixes 13f3ccc typo fix 8047c57 backend session listener d456d86 session expiration fix f6cc150 Merge pull request #655 from takeit/temp b9b9a50 WOBS-3189 - Fix the slider: Users comments on user profile pages 65898ef [plugins manager] improve upgrade command, fix checking if private plugin is installed, make new plugins manager default 07f83fb Merge pull request #654 from ahilles107/CS-4922_images_search 52e632a [api fix] fix fetching highest number of attached to article image 4438b38 Merge pull request #652 from ahilles107/CS-4922_images_search 9cd9d5d [api change] change unlink route to have language in it 62480a4 CS-4922: query param is not required 8f3c524 CS-4922: images search, insert image polish translation, fix in linking objects to article e42060e Merge pull request #651 from terwey/patch-4 23bdf42 Update GenerateORMSchemaCommand.php 81821c2 CS-4922: fix in image uri handler and start for images search controller bd111a8 Merge pull request #646 from takeit/temp 300e868 Merge branch 'tw-temp' of github.com:sourcefabric/Newscoop into temp b052535 Merge pull request #649 from ahilles107/CS-4996 6cd43da CS-4996: Provide image for comment author (commenter object is added to comment response) 43f96ca Merge pull request #648 from ahilles107/CS-5330_api_expand 8093fb0 support query param expand to change serialization group to details. error handling improvement 8795cef Merge pull request #647 from ahilles107/fix_api_error_handling 22b772f remove unwanted translation entity change 20fa2bb fix exceptions handling for api 4d195d5 ban fix a6f5ee5 Change First name and Last name in user ban settings a278049 [WOBS-3151] - Support Community TagesWoche | added info about publication that user registered with b778ec0 Merge pull request #645 from ahilles107/CS-5329 ccf99c9 accept also full urls for linked resources d4aaf21 Merge pull request #640 from takeit/temp 2ca3a7f Merge pull request #643 from m038/WOBS-3177-tw-temp ef2704e Merge pull request #642 from m038/WOBS-3177 b070ccb WOBS-3177: Adds missing code to core for this feature f0244d3 fixes 89bf25c WOBS-3177: Adds missing code to core for this feature 63b7614 Merge pull request #641 from ahilles107/master 727826c Merge branch 'tw-temp' of github.com:sourcefabric/Newscoop d4f6acf [WOBS-3180] - Users list pagination doesn't work properly 93a9d99 Merge pull request #639 from takeit/tw-temp a8b646d FilesystemService & attachments name sanitization e7f9179 Merge pull request #637 from m038/WOBS-3117 c5570cb Merge pull request #638 from m038/WOBS-3117-tmp 6839187 WOBS-3117: Partially restores previous verion of entity 7602161 WOBS-3117: Partially restores previous verion of entity b1b1050 Merge pull request #636 from takeit/tw-temp d8a1d84 revert changes 7df38a7 Merge pull request #634 from ahilles107/cleaning 2793188 revert current versions 86990ba Merge branch 'tw-temp' of github.com:sourcefabric/Newscoop into cleaning 28a9d7e Merge pull request #635 from takeit/tw-temp 993f08e translation fixes b3e8f16 remove unwanted getId method d34e5a9 [WOBS-3132] - Attached files don’t show up on backside of articles 727c465 Merge pull request #633 from takeit/tw-temp 605911d [WOBS-3179] - Change commenter name to username in backend ad54d05 cleaning ad2471d [WOBS-3178] - Remove limitation from displaying comments text in backend 840ec33 Merge pull request #632 from takeit/tw-temp a7c5f34 removed int 1683da4 [WOBS-3152] - Number of contributions "Beiträge" does not seem correct 011c607 Merge pull request #631 from takeit/tw-temp f157cee [WOBS-3132] - Attached files don’t show up on backside of articles b4026f4 Merge pull request #630 from takeit/tw-temp cfdcb87 [WOBS-3149] - character count for body text is missing (improvements) a982970 Merge pull request #629 from takeit/tw-temp 60e6de0 hide button when no image b6b894d [WOBS-3169] - Author's picture in biography tab & [WOBS-3148] - User image limit debedaa Merge pull request #628 from takeit/tw-temp 01af2cc menu improvement and fix 907739c Merge branch 'master' of github.com:sourcefabric/Newscoop bee38e3 Release of new version 4.2.16 053411c Release of new version 4.2.15 f97a10d Release of new version 4.2.14 f48527c Release of new version 4.2.13 e895461 Release of new version 4.2.12 702ad9d Release of new version 4.2.11 f8f1918 Release of new version 4.2.10 9f1fe1c Merge pull request #626 from takeit/css 26df94f css image fix 8c0e8a3 Merge pull request #625 from ahilles107/fixes 3d84ac8 Merge branch 'attachments' of github.com:ahilles107/Newscoop into v4.3 e84066a Merge branch 'attachments' of github.com:ahilles107/Newscoop into v4.3 Version 4.3 - First Newscoop 4.3 alpha, installable, with almost all features, almost ready to freeze, enjoy 17/07/2014 22:14 4.3.0-alpha initial release ================================================ FILE: newscoop/LICENSE_3RD_PARTY.txt ================================================ 3rd Party Software / Data ************************* Newscoop builds on top of a number of open source projects. We thank all people behind these resources for their amazing job ! Below are the licenses for the projects we use, with Debian package names where known. NOTE: This list is a work in progress, we apologize to any project no mentioned here at this point. -------------------------------- PHP Frameworks, Tools, Libraries -------------------------------- * Smarty v3 - (http://www.smarty.net) - GNU LESSER GENERAL PUBLIC LICENSE, Version 3 (Debian: smarty) * Doctrine - (http://www.doctrine-project.org/) - GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 "sudo pear channel-discover pear.doctrine-project.org" "sudo pear install pear.doctrine-project.org/Doctrine-1.2.4" * Zend Framework - (http://framework.zend.com/license) - New BSD License * Symfony - (http://symfony.com) - MIT License * Composer - (http://getcomposer.org) - MIT License * GETID3 - GNU GENERAL PUBLIC LICENSE, Version 2 (Debian: php-getid3) * JSON library (public domain) (Debian: php-services-json?) * PHPCaptcha - New BSD License ------------- PEAR packages ------------- * Archive_Tar (http://pear.php.net/package/Archive_Tar) - New BSD License (Debian: php-pear) * Console_Getopt (http://pear.php.net/package/Console_Getopt) - The PHP License, version 3.01 * Date (http://pear.php.net/package/Date) - New BSD License (Debian: php-date) * HTML_Common 1.2.5 (http://pear.php.net/package/HTML_Common) - The PHP License, version 3.01 (Debian: php-html-common) * File (http://pear.php.net/package/File) - The PHP License, version 3.01 (In Debian? Needs checking) * File_Find (http://pear.php.net/package/File_Find) - The PHP License, version 3.01 (In Debian? Needs checking) * HTTP_Client 1.2.1 (http://pear.php.net/package/HTTP_Client) - New BSD License * HTTP_Request 1.4.4 (http://pear.php.net/package/HTTP_Request) - New BSD License * Mail 1.2.0 (http://pear.php.net/package/Mail) - New BSD * Net_Socket 1.0.9 - (http://pear.php.net/package/Net_Socket) - The PHP License, version 3.01 * Net_URL 1.0.15 (http://pear.php.net/package/Net_URL) - New BSD * PEAR 1.9.0 (http://pear.php.net/package/PEAR) - New BSD * XML_Parser 1.3.2 (http://pear.php.net/package/XML_Parser) - New BSD * XML_RPC 1.5.3 (http://pear.php.net/package/XML_RPC) - The PHP License, version 3.01 * XML_Serializer 0.20.0 (http://pear.php.net/package/XML_Serializer) - New BSD sudo pear install -f XML_Serializer * XML_Util 1.2.1 (http://pear.php.net/package/XML_Util) - New BSD ---------- Javascript ---------- * Base64 library (GPL v.3) * TinyMCE - GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Debian: tinymce) * Markdown - BSD style, see: http://daringfireball.net/projects/markdown/license (Debian: markdown) * Script.aculo.us - custom license, http://madrobby.github.com/scriptaculous/license/ (Debian: libjs-scriptaculous) * jQuery- GNU GENERAL PUBLIC LICENSE, Version 2 (Debian: libjs-jquery) * JQuery components * DataTables - GPL v.2 or BSD (not yet in Debian?) * FancyBox - MIT or GPL v.2 (not yet in Debian?) * Backbone.js - (http://backbonejs.org) - MIT License * EditArea - GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 (Debian: libjs-edit-area) * Prototype - MIT style: https://github.com/sstephenson/prototype/raw/master/LICENSE (Debian: libjs-prototype) * Plupload - GNU GENERAL PUBLIC LICENSE, Version 2 only * PhotoViewer - Creative Commons Attribution-Share Alike 3.0 United States License http://creativecommons.org/licenses/by-sa/3.0/us/ ----- Fonts ----- In include/captcha/fonts/ we have Bitstream Vera, custom license: http://packages.debian.org/changelogs/pool/main/t/ttf-bitstream-vera/ttf-bitstream-vera_1.10-8/ttf-bitstream-vera.copyright (Debian: ttf-bitstream-vera) ------------ Geo-location ------------ * Based mainly on the OpenLayers library, BSD license. * OpenLayers uses parts of the Prototype (MIT license) and Rico (Apache 2.0 license) libraries * OpenStreetMap tiles (OSM, Mapquest Open): Creative commons CC-BY-SA, application has to state that with a link * Geographical data: GeoNames - Creative commons BY 3.0 ------------- Media playing ------------- * Strobe Media Playback (BSD license) (now known as OSMF) ================================================ FILE: newscoop/RMT ================================================ #!/usr/bin/env php getService('translator'); $ADReason = Input::Get('ADReason', 'string', $translator->trans('You do not have the right to access this page.', array(), 'home'), true); ?>

trans("Error"); ?>
  • ================================================ FILE: newscoop/admin-files/ad_popup.php ================================================ getService('translator'); require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); $ADReason = Input::Get('ADReason', 'string', $translator->trans('You do not have the right to access this page.', array(), 'home'), true); ?> <?php echo $translator->trans("Error"); ?>

    trans("Error"); ?>
    trans('Close'); ?>
    ================================================ FILE: newscoop/admin-files/article_import/CommandProcessor.php ================================================ getService('translator'); // Command processor if ($_REQUEST["form_name"] == "upload_article_form") { if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } upload_article_handler($_REQUEST, $_SESSION, $_FILES); } function upload_article_handler(&$request, &$session, &$files) { $publication = Input::Get('Pub', 'int', 0); $issue = Input::Get('Issue', 'int', 0); $section = Input::Get('Section', 'int', 0); $language = Input::Get('Language', 'int', 0); $sLanguage = Input::Get('sLanguage', 'int', 0); $articleNumber = Input::Get('Article', 'int', 0); if (!Input::IsValid()) { echo "Input Error: Missing input"; return; } // Unzip the sxw file to get the content. $zip = zip_open($files["filename"]["tmp_name"]); if ($zip) { $xml = null; while ($zip_entry = zip_read($zip)) { if (zip_entry_name($zip_entry) == "content.xml") { if (zip_entry_open($zip, $zip_entry, "r")) { $xml = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } } } zip_close($zip); if (!is_null($xml)) { // Write the XML to a file because the XSLT functions // require it to be in a file in order to be processed. $tmpXmlFilename = tempnam("/tmp", "ArticleImportXml"); $tmpXmlFile = fopen($tmpXmlFilename, "w"); fwrite($tmpXmlFile, $xml); fclose($tmpXmlFile); // Transform the OpenOffice document to DocBook format. $xsltProcessor = xslt_create(); $docbookXml = xslt_process($xsltProcessor, $tmpXmlFilename, "sxwToDocbook.xsl"); unlink($tmpXmlFilename); // Parse the docbook to get the data. $docBookParser = new DocBookParser(); $docBookParser->parseString($docbookXml, true); $article = new Article($articleNumber, $language); $article->setTitle($docBookParser->getTitle()); $article->setIntro($docBookParser->getIntro()); $article->setBody($docBookParser->getBody()); // Go back to the "Edit Article" page. header("Location: /$ADMIN/articles/edit.php?Pub=$publication&Issue=$issue&Section=$section&Article=$articleNumber&Language=$language&sLanguage=$sLanguage"); } // if (!is_null($xml)) } // if ($zip) // Some sort of error occurred - show the upload page again. include("index.php"); } // fn upload_article_handler ?> ================================================ FILE: newscoop/admin-files/article_import/DocBookParser.php ================================================ XML_Parser_Simple(); } // constructor function handleElement($name, $attribs, $data) { //printf('handle %s
    ', $name); switch ($name) { case "AUTHOR": $this->m_author = $data; break; // case "FIRSTNAME": // $this->m_firstName = $data; // break; // case "SURNAME": // $this->m_surName = $data; // break; case "TITLE": $this->m_title = $data; break; case "ABSTRACT": $this->m_intro = $data; break; case "SIMPLESECT": $this->m_body = $data; break; } } // fn handleElement function dump() { echo "Title: " . $this->m_title . "
    "; //echo "Author: " . $this->m_firstName . " " . $this->m_surName . "
    "; echo "Author: " . $this->m_author . "
    "; echo "Intro: " . $this->m_intro . "
    "; echo "Body: " . $this->m_body . "
    "; } // fn dump function getAuthor() { //return $this->m_firstName . " " . $this->m_surName; return $this->m_author; } // fn getAuthor function getTitle() { return $this->m_title; } // fn getTitle function getIntro() { return $this->m_intro; } // fn getIntro function getBody() { return $this->m_body; } // fn getBody } // class DocBookParser ?> ================================================ FILE: newscoop/admin-files/article_import/DocbookFinalForm.xml ================================================
    NormanWalsh A World Wide Web Interface to CTAN blah ]]>
    ================================================ FILE: newscoop/admin-files/article_import/Installation.txt ================================================ Article Import Installation Instructions ---------------------------------------- ZZipLib needs to be installed. You can get it here: http://zziplib.sourceforge.net/ ./configure; make; make install; XSLT libraries: Sablotron: http://www.gingerall.com Expat: http://sourceforge.net/projects/expat Then you need to recompile Apache & PHP. First do this: export LDFLAGS=-lstdc++ "Make sure you follow the advice of adding -lstdc++ to EXTRA_LD_FLAGS in Makefile after you've run ./configure, and BEFORE you've run make (if you issue make, you'll need to do a make clean before you make again, after changing the Makefile, or it still won't work reliably)." Apache configure command (must be rebuilt after the export command above): configure --prefix=/usr/local/apache-1.3 --enable-module=so PHP configure command: ./configure --prefix=/usr/local/php-4.3.4 --with-mysql --with-apxs=/usr/local/apache-1.3/bin/apxs --with-zip --enable-xslt --with-xslt-sablot Sablotron,expat,libxml,.., and PHP compilation FAQ (read this if you encounter errors): http://www.protonicdesign.com/tutorial/faq.php ================================================ FILE: newscoop/admin-files/article_import/index.php ================================================ getService('translator'); $rootDirectory = $ADMIN_DIR; $Pub = Input::Get('Pub', 'int', 0); $Issue = Input::Get('Issue', 'int', 0); $Section = Input::Get('Section', 'int', 0); $Language = Input::Get('Language', 'int', 0); $sLanguage = Input::Get('sLanguage', 'int', 0); $Article = Input::Get('Article', 'int', 0); if (!Input::IsValid()) { header("Location: /$ADMIN/logout.php"); exit; } $articleObj = new Article($sLanguage, $Article); $sectionObj = new Section($Pub, $Issue, $Language, $Section); $issueObj = new Issue($Pub, $Language, $Issue); $publicationObj = new Publication($Pub); $articleLanguage = new Language($Language); $issueLanguage = new Language($sLanguage); ?> <?php echo $translator->trans("Article Import"); ?>
    trans("Article Import"); ?>
    trans("Articles"); ?> trans("Sections"); ?> trans("Issues"); ?> trans("Publications"); ?>
     trans("Publication"); ?>: getName()); ?>  trans("Issue"); ?>: getIssueNumber(); ?>. getName()); ?> (getName()); ?>)  trans("Section"); ?>: getSectionNumber(); ?>. getName()); ?>  trans("Article"); ?>: getTitle()); ?> (getName()); ?>)
    Here you can upload an article that has been written in Open Office (files with extension ".sxw"). Click here to get the template.
    Article Import
    Upload File:
    ================================================ FILE: newscoop/admin-files/article_import/stylesheet.css ================================================ BODY, TH, TD, FORM, BLOCKQUOTE, UL, LI { font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 10pt; } SMALL, ADDRESS { font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 8pt; } A { font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 10pt; text-decoration: none; color: darkblue; } ================================================ FILE: newscoop/admin-files/article_import/sxwToDocbook.xsl ================================================
    <xsl:value-of select="."/> <xsl:value-of select="."/>
    ================================================ FILE: newscoop/admin-files/article_types/add.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans('You do not have the right to add article types.', array(), 'article_types')); exit; } $articleTypes = ArticleType::GetArticleTypes(true); $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans('Add new article type', array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); ?>

    trans('Article Types', array(), 'article_types'); ?>
    trans('The template name may only contain letters and the underscore (_) character.', array(), 'article_types'); ?>
    trans('Template Type Name', array(), 'article_types'); ?>: " SIZE="15" MAXLENGTH="15">

    ================================================ FILE: newscoop/admin-files/article_types/do_add.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to add article types.", array(), 'article_types')); exit; } $f_name = trim(Input::Get('f_name')); $correct = true; $created = false; $errorMsgs = array(); if (empty($f_name)) { $correct = false; $errorMsgs[] = $translator->trans('You must fill in the $1 field.', array('$1' => ''.$translator->trans('Name')).''); } if ($correct) { $valid = ArticleType::IsValidFieldName($f_name); if (!$valid) { $correct = false; $errorMsgs[] = $translator->trans('The $1 field may only contain letters and underscore (_) character.', array('$1' => ''.$translator->trans('Name').''), 'article_types'); } } if ($correct) { $articleType = new ArticleType($f_name); if ($articleType->exists()) { $correct = false; $errorMsgs[] = $translator->trans('The article type $1 already exists.', array('$1' => ''.htmlspecialchars($f_name).''), 'article_types'); } if ($correct) { $created = $articleType->create(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/add.php?f_article_type=$f_name"); } } $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Adding new article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Adding new article type", array(), 'article_types'); ?>
    ".$errorMsg.""; } ?>

    ================================================ FILE: newscoop/admin-files/article_types/do_comment_activation.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to rename article types.", array(), 'article_types')); exit; } $articleTypeName = Input::Get('f_article_type'); $errorMsgs = array(); $articleType = new ArticleType($articleTypeName); if ($articleType->exists()) { $articleType->setCommentsEnabled(!$articleType->commentsEnabled()); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article_type.comments_management', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article_type' => $articleType, 'new_status' => !$articleType->commentsEnabled() ))); } camp_html_goto_page("/$ADMIN/article_types/"); ?> ================================================ FILE: newscoop/admin-files/article_types/do_del.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('DeleteArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to delete article types.", array(), 'article_types')); exit; } $articleTypeName = Input::Get('f_article_type'); $doDelete = true; $errorMsgs = array(); if ($doDelete) { $articleType = new ArticleType($articleTypeName); $articles = Article::GetArticlesOfType($articleTypeName); foreach ($articles as $a) { $a->delete(); } $articleType->delete(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/"); } else { $errorMsgs[] = $translator->trans('The article type $1 could not be deleted.', array('$1' => ''.htmlspecialchars($articleTypeName).''), 'article_types'); } $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Delete article type $1", array('$1' => $articleTypeName), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Delete article type $1", array('$1' => $articleTypeName), 'article_types'); ?>
  • ================================================ FILE: newscoop/admin-files/article_types/do_filter.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_articleTypeName = Input::Get('f_article_type'); $f_filter = Input::Get('f_filter'); $errorMsgs = array(); $res = \ArticleType::SetTypeFilter($f_articleTypeName, $f_filter); camp_html_goto_page("/$ADMIN/article_types/"); ?> ================================================ FILE: newscoop/admin-files/article_types/do_hide.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $articleTypeName = Input::Get('f_article_type'); $status = Input::Get('f_status'); $errorMsgs = array(); $articleType = new ArticleType($articleTypeName); $articleType->setStatus($status); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article_type.hide', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article_type' => $articleType ))); camp_html_goto_page("/$ADMIN/article_types/"); ================================================ FILE: newscoop/admin-files/article_types/do_rename.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to rename article types.", array(), 'article_types')); exit; } $f_oldName = trim(Input::get('f_oldName')); $f_name = trim(Input::Get('f_name')); if ($f_oldName == $f_name) { camp_html_goto_page("/$ADMIN/article_types/"); } $correct = true; $created = false; $errorMsgs = array(); if (empty($f_name)) { $correct = false; $errorMsgs[] = $translator->trans('You must fill in the $1 field.', array('$1' => ''.$translator->trans('Name').'')); } else { $valid = ArticleType::IsValidFieldName($f_name); if (!$valid) { $correct = false; $errorMsgs[] = $translator->trans('The $1 field may only contain letters and underscore (_) character.', array('$1' => ''.$translator->trans('Name').''), 'article_types'); } if ($correct) { $old_articleType = new ArticleType($f_oldName); if (!$old_articleType->exists()) { $correct = false; $errorMsgs[] = $translator->trans('The article type $1 does not exist.', array('$1' => ''.htmlspecialchars($f_oldName).''), 'article_types'); } } if ($correct) { $articleType = new ArticleType($f_name); if ($articleType->exists()) { $correct = false; $errorMsgs[] = $translator->trans('The article type $1 already exists.', array('$1' => ''. htmlspecialchars($f_name). ''), 'article_types'); } } if ($correct) { $old_articleType->rename($f_name); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article_type.hide', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article_type' => $articleType, 'old_name' => $f_oldName ))); camp_html_goto_page("/$ADMIN/article_types/"); } } $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Rename article type $1", array('$1' => $f_oldName), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    ".$errorMsg.""; } ?>

    ================================================ FILE: newscoop/admin-files/article_types/do_translate.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to add article types.", array(), 'article_types')); exit; } $f_type_id = Input::Get('f_type_id'); $f_type_language_id = Input::Get('f_type_language_id', 'int', 0); $f_type_translation_name = trim(Input::Get('f_type_translation_name')); $correct = true; $created = false; $errorMsgs = array(); if ($f_type_language_id <= 0) { $correct = false; $errorMsgs[] = $translator->trans('You must choose a language for the article type.', array(), 'article_types'); } if ($correct) { // Translate existing type $type = new ArticleType($f_type_id); $created = $type->setName($f_type_language_id, $f_type_translation_name); if ($created) { $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article_type.translate', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article_type' => $type ))); camp_html_goto_page("/$ADMIN/article_types/index.php"); } else { $errorMsgs[] = $translator->trans('The translation could not be added.', array(), 'article_types'); } } $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Adding new article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Adding new article type", array(), 'article_types'); ?>
    ".$errorMsg.""; } ?>

    ================================================ FILE: newscoop/admin-files/article_types/fields/add.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans('You do not have the right to add article types.', array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $lang = camp_session_get('LoginLanguageId', 1); $langObj = new Language($lang); $currentLanguageId = $langObj->getLanguageId(); $em = \Zend_Registry::get('container')->getService('em'); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $topicService = \Zend_Registry::get('container')->getService('newscoop_newscoop.topic_service'); $topicsCount = $topicService->countBy(); $cacheKey = $cacheService->getCacheKey(array('topics_add_article_type', $topicsCount), 'topic'); $repository = $em->getRepository('Newscoop\NewscoopBundle\Entity\Topic'); if ($cacheService->contains($cacheKey)) { $topics = $cacheService->fetch($cacheKey); } else { $topicsQuery = $repository->getTranslatableTopics($langObj->getCode()); $topics = $topicsQuery->getResult(); $cacheService->save($cacheKey, $topics); } $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); $crumbs[] = array($translator->trans("Add new field", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); foreach (ArticleTypeField::DatabaseTypes() as $type=>$sqlDesc) { $options[$type] = ArticleTypeField::VerboseTypeName($type, $currentLanguageId); } ?>

    trans('The template name may only contain letters and the underscore (_) character.', array(), 'article_type_fields'); ?>
    trans("Template Field Name", array(), 'article_type_fields'); ?>: ">
    trans("Type"); ?>:
    trans('Event Color', array(), 'article_type_fields'); ?>: '; foreach ($color_list as $one_color) { $color_div .= '
    '; } $color_div .= ''; $color_div .= '
    '; echo $color_div; ?>
    trans('Characters limit', array(), 'article_type_fields'); ?>:

    ================================================ FILE: newscoop/admin-files/article_types/fields/do_add.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to add article type fields.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $fieldName = trim(Input::Get('f_field_name')); $showInEditor = Input::Get('f_show_in_editor', 'int', 0); $fieldType = trim(Input::Get('f_article_field_type')); $rootTopicId = Input::Get('f_root_topic_id', 'int', 0); $isContent = Input::Get('f_is_content'); $precision = Input::Get('f_precision'); $editorSize = Input::Get('f_editor_size'); $editorSizeCustom = Input::Get('f_editor_size_custom'); $maxsize = Input::Get('f_maxsize'); $eventColor = Input::Get('f_event_color'); $field = new ArticleTypeField($articleTypeName, $fieldName); $correct = true; $errorMsgs = array(); if (!ArticleType::IsValidFieldName($fieldName)) { $errorMsgs[] = $translator->trans('The $1 must not be void and may only contain letters and underscore (_) character.', array('$1' => $translator->trans('Name')), 'article_type_fields'); $correct = false; } if ($field->exists()) { $errorMsgs[] = $translator->trans('The field $1 already exists.', array('$1' => ''.urlencode($fieldName).''), 'article_type_fields'); $correct = false; } $validTypes = array_keys(ArticleTypeField::DatabaseTypes()); if (!in_array($fieldType, $validTypes)) { $errorMsgs[] = $translator->trans('Invalid field type.', array(), 'article_type_fields'); $correct = false; } $article = new MetaArticle(); if ($article->has_property($fieldName) || method_exists($article, $fieldName)) { $correct = false; $errorMsgs[] = $translator->trans("The property $1 is already in use.", array('$1' => $fieldName), 'article_type_fields'); } if ($correct) { if ($editorSize == 'small') $editorSize = ArticleTypeField::BODY_ROWS_SMALL; else if ($editorSize == 'medium') $editorSize = ArticleTypeField::BODY_ROWS_MEDIUM; else if ($editorSize == 'large') $editorSize = ArticleTypeField::BODY_ROWS_LARGE; else if ($editorSize == 'custom') $editorSize = $editorSizeCustom; else $editorSize = ArticleTypeField::BODY_ROWS_MEDIUM; $params = array('root_topic_id'=>$rootTopicId, 'is_content'=>strtolower($isContent) == 'on', 'precision'=>$precision, 'maxsize'=>$maxsize, 'editor_size' => $editorSize, 'event_color' => $eventColor, 'show_in_editor'=>$showInEditor ); $field->create($fieldType, $params); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); } $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); $crumbs[] = array($translator->trans("Adding new field", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    ================================================ FILE: newscoop/admin-files/article_types/fields/do_del.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('DeleteArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to delete article type fields.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $fieldName = Input::Get('f_field_name'); $field = new ArticleTypeField($articleTypeName, $fieldName); if ($field->exists()) { $field->delete(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); } camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); ?> ================================================ FILE: newscoop/admin-files/article_types/fields/do_hide.php ================================================ getService('translator'); if (!Saas::singleton()->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to hide article types.", array(), 'article_type_fields')); exit; } if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $articleTypeName = Input::Get('f_article_type'); $articleTypeFieldName = Input::Get('f_field_name'); $status = Input::Get('f_status'); $errorMsgs = array(); $articleTypeField = new ArticleTypeField($articleTypeName, $articleTypeFieldName); $articleTypeField->setStatus($status); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); ?> ================================================ FILE: newscoop/admin-files/article_types/fields/do_rename.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to rename article type fields.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $f_oldName = Input::Get('f_old_field_name'); $f_name = Input::Get('f_new_field_name'); if ($f_oldName == $f_name) { camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=". urlencode($articleTypeName)); } $correct = true; $created = false; $errorMsgs = array(); if (empty($f_name)) { $correct = false; $errorMsgs[] = $translator->trans('You must fill in the $1 field.', array('$1' => ''.$translator->trans('Name').'')); } else { $valid = ArticleType::IsValidFieldName($f_name); if (!$valid) { $correct = false; $errorMsgs[] = $translator->trans('The $1 field may only contain letters and underscore (_) character.', array('$1' => ''.$translator->trans('Name').''), 'article_type_fields'); } if ($correct) { $old_articleTypeField = new ArticleTypeField($articleTypeName, $f_oldName); if (!$old_articleTypeField->exists()) { $correct = false; $errorMsgs[] = $translator->trans('The field $1 does not exist.', array('$1' => ''.htmlspecialchars($f_oldName).''), 'article_type_fields'); } } if ($correct) { $articleTypeField = new ArticleTypeField($articleTypeName, $f_name); if ($articleTypeField->exists()) { $correct = false; $errorMsgs[] = $translator->trans('The field $1 already exists.', array('$1' => ''.htmlspecialchars($f_name). ''), 'article_type_fields'); } } if ($correct) { $article = new MetaArticle(); if ($article->has_property($f_name) || method_exists($article, $f_name)) { $correct = false; $errorMsgs[] = $translator->trans("The property $1 is already in use.", array('$1' => $f_name), 'article_type_fields'); } } if ($correct) { $old_articleTypeField->rename($f_name); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=". urlencode($articleTypeName)); } } $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); $crumbs[] = array($translator->trans("Renaming article type field", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Renaming article type field", array(), 'article_type_fields'); ?>
    ".$errorMsg.""; } ?>

    ================================================ FILE: newscoop/admin-files/article_types/fields/do_reorder.php ================================================ getService('translator'); if (!Saas::singleton()->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to reorder article types.", array(), 'article_types')); exit; } if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $articleTypeName = Input::Get('f_article_type'); $articleTypeFieldName = Input::Get('f_field_name'); $move = Input::Get('f_move'); $errorMsgs = array(); $articleTypeField = new ArticleTypeField($articleTypeName, $articleTypeFieldName); $articleTypeField->reorder($move); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); ?> ================================================ FILE: newscoop/admin-files/article_types/fields/do_retype.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to reassign article type fields.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $fieldName = trim(Input::Get('f_field_name')); $fieldType = trim(Input::Get('f_article_field_type')); $field = new ArticleTypeField($articleTypeName, $fieldName); $correct = true; $errorMsgs = array(); if (!$field->exists()) { $errorMsgs[] = $translator->trans('The field $1 does not exist.', array('$1' => ''.urlencode($fieldName).''), 'article_type_fields'); $correct = false; } if (array_search($fieldType, $field->getConvertibleToTypes()) === false) { $errorMsgs[] = $translator->trans('Can not convert the field $1 from $2 to type $3.', array('$1' => $fieldName, '$2' => $field->getType(), '$3' => $fieldType), 'article_type_fields'); $correct = false; } if ($correct) { $field->setType($fieldType); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); } $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); $crumbs[] = array($translator->trans("Adding new field", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Adding new field", array(), 'article_type_fields'); ?>

    ================================================ FILE: newscoop/admin-files/article_types/fields/do_translate.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to translate article types.", array(), 'article_type_fields')); exit; } $f_field_id = Input::Get('f_field_id'); $f_field_language_id = Input::Get('f_field_language_id', 'int', 0); $f_field_translation_name = trim(Input::Get('f_field_translation_name')); $f_article_type = Input::Get('f_article_type'); $correct = true; $created = false; $errorMsgs = array(); if (empty($f_field_translation_name)) { $correct = false; $errorMsgs[] = $translator->trans('You must fill in the $1 field.', array('$1' => ''.$translator->trans('Name').'')); } if ($f_field_language_id <= 0) { $correct = false; $errorMsgs[] = $translator->trans('You must choose a language for the field.'); } if ($correct) { // Translate existing type $field = new ArticleTypeField($f_article_type, $f_field_id); $created = $field->setName($f_field_language_id, $f_field_translation_name); if ($created) { $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=". $f_article_type); exit; } else { $errorMsgs[] = $translator->trans('The translation could not be added.'); } } $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($f_article_type, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($f_article_type)); $crumbs[] = array($translator->trans('Add new article type', array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Translating field"); ?>
    ".$errorMsg.""; } ?>

    ================================================ FILE: newscoop/admin-files/article_types/fields/index.php ================================================ getService('translator'); $request = \Zend_Registry::get('container')->get('request'); $locale = $request->getLocale(); if (!Saas::singleton()->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to manage article types.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); // return value is sorted by language $allLanguages = Language::GetLanguages(null, null, null, array(), array(), true); $lang = Language::GetLanguageByCode($locale); $languageObj = new Language($lang->getLanguageId()); $articleType = new ArticleType($articleTypeName); $fields = $articleType->getUserDefinedColumns(null, true, true); $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ""); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); $row_rank = 0; if ($g_user->hasPermission("ManageArticleTypes")) { include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); ?>
    trans('Back to Article Types List', array(), 'article_type_fields'); ?>

    '; } ?>
    '; echo $translator->trans("Add new field"); echo '
    '; document['show'].src='/viewmagminus.png'; } else { HideAll(field_ids); allShown = 0; document.getElementById('showtext').innerHTML = 'trans("Edit and translate human-readable field names", array(), 'article_type_fields'); ?>'; document['show'].src='/viewmagplus.png'; }"> '; document['show'].src='/viewmagminus.png'; } else { HideAll(field_ids); allShown = 0; document.getElementById('showtext').innerHTML = 'trans("Edit and translate human-readable field names", array(), 'article_type_fields'); ?>'; document['show'].src='/viewmagplus.png'; }">
    trans("Edit and translate human-readable field names", array(), 'article_type_fields'); ?>

    hasPermission("ManageArticleTypes")) { ?> getStatus() == 'hidden') { $hideShowText = $translator->trans('show', array(), 'article_type_fields'); $hideShowStatus = 'show'; $hideShowImage = "is_hidden.png"; } else { $hideShowText = $translator->trans('hide', array(), 'article_type_fields'); $hideShowStatus = 'hide'; $hideShowImage = "is_shown.png"; } if ($field->isContent()) { $contentType = 'non content'; $isContentField = 'true'; $setContentField = 'false'; } else { $contentType = 'content'; $isContentField = 'false'; $setContentField = 'true'; } if ($field->showInEditor()) { $editorType = 'not displayed in editor'; $showInEditor = 'true'; $setShowInEditor = 'false'; } else { $editorType = 'displayed in editor'; $showInEditor = 'false'; $setShowInEditor = 'true'; } $fieldName = $field->getPrintName(); $article = new MetaArticle(); if ($article->has_property($fieldName) || method_exists($article, $fieldName)) { $duplicateFieldName = true; $duplicateFieldsCount++; } else { $duplicateFieldName = false; } ?> class="list_row_even"class="list_row_odd"> hasPermission("ManageArticleTypes")) { ?>
    trans("Order"); ?> trans("Template Field Name", array(), 'article_type_fields'); ?> trans("Type"); ?> trans("Display Name", array(), 'article_type_fields'); ?> trans("Translate"); ?> trans("Page Read Count?", array(), 'article_type_fields'); ?> trans("Editorial Content?", array(), 'article_type_fields'); ?> trans("Event Color", array(), 'article_type_fields'); ?> trans("Show to Authors?", array(), 'article_type_fields'); ?> trans("Delete"); ?>
    1 && $i < count($fields) - 1) { ?> 
    1 && $i != 0) { ?> 
    '; } ?> getPrintName()); ?>  '; } ?> getVerboseTypeName($languageObj->getLanguageId())); ?> getDisplayName($languageObj->getLanguageId())); ?> getDisplayNameLanguageCode($languageObj->getLanguageId())); ?> /localizer.png" alt="trans("Translate"); ?>" title="trans("Translate"); ?>" border="0"> getType() == ArticleTypeField::TYPE_BODY) { ?> isContent()) { ?>checked id="set_is_content_" name="set_is_content_" onclick="if (confirm('trans('Are you sure you want to make $1 a $2 field?', array('$1' => $field->getPrintName(), '$2' => $contentType), 'article_type_fields'); ?>')) { location.href='//article_types/fields/set_is_content.php?f_article_type=&f_field_name=getPrintName()); ?>&f_is_content=&' } else { document.getElementById('set_is_content_').checked = }"> trans('N/A'); ?> getType() == ArticleTypeField::TYPE_SWITCH ) { ?> trans('N/A'); ?> showInEditor()) { ?>checked id="set_show_in_editor_" name="set_show_in_editor_" onclick="if (confirm('trans('Are you sure you want to make $1 a $2 field?', array('$1' => $field->getPrintName(), '$2' => $editorType), 'article_type_fields'); ?>')) { location.href='//article_types/fields/set_show_in_editor.php?f_article_type=&f_field_name=getPrintName()); ?>&f_show_in_editor=&' } else { document.getElementById('set_show_in_editor_').checked = }"> getType() != ArticleTypeField::TYPE_COMPLEX_DATE) { echo $translator->trans('N/A'); } else { $cur_color = $field->getColor(); $color_div = ''; $color_div .= '
    '; foreach ($color_list as $one_color) { $color_div .= '
    '; } $color_div .= '
    '; $color_div .= '
    '; echo $color_div; } ?>
    /" BORDER="0" ALT="trans('$1 article type field $2', array('$1' => ucfirst($hideShowText), '$2' => $field->getPrintName()), 'article_type_fields'); ?>" TITLE="trans('$1 article type $2', array('$1' => ucfirst($hideShowText), '$2' => $field->getPrintName()), 'article_type_fields');?>" > /delete.png" BORDER="0" ALT="trans('Delete field $1', array('$1' => htmlspecialchars($field->getPrintName())), 'article_type_fields'); ?>" TITLE="trans('Delete field $1', array('$1' => htmlspecialchars($field->getPrintName())), 'article_type_fields'); ?>" >
    0) { echo "

    ** " . $translator->trans('The field name was already in use as a base property of the article. The field content will not be displayed in the templates.', array(), 'article_type_fields') . "

    "; } ?> ================================================ FILE: newscoop/admin-files/article_types/fields/rename.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to rename article type fields.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $articleTypeFieldName = Input::Get('f_field_name'); $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); $crumbs[] = array($translator->trans("Rename field", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); ?>

    trans('The template name may only contain letters and the underscore (_) character.', array(), 'article_type_fields'); ?>
    trans("Template Field Name", array(), 'article_type_fields'); ?>:

    ================================================ FILE: newscoop/admin-files/article_types/fields/retype.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to reassign a field type.", array(), 'article_type_fields')); exit; } $articleTypeName = Input::Get('f_article_type'); $articleTypeFieldName = Input::Get('f_field_name'); $articleField = new ArticleTypeField($articleTypeName, $articleTypeFieldName); $crumbs = array(); $crumbs[] = array($translator->trans('Configure'), ""); $crumbs[] = array($translator->trans('Article Types'), "/$ADMIN/article_types/"); $crumbs[] = array($articleTypeName, ''); $crumbs[] = array($translator->trans("Article type fields", array(), 'article_type_fields'), "/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); $crumbs[] = array($translator->trans("Reassign a field type", array(), 'article_type_fields'), ""); echo camp_html_breadcrumbs($crumbs); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); $lang = camp_session_get('LoginLanguageId', 1); $languageObj = new Language($lang); // Verify the merge rules $options = array(); $convertibleFromTypes = $articleField->getConvertibleToTypes(); foreach ($convertibleFromTypes as $type) { $options[$type] = ArticleTypeField::VerboseTypeName($type, $languageObj->getLanguageId()); } ?>

    You cannot reassign this type.

    trans("Type"); ?>:

    getType() == ArticleTypeField::TYPE_TOPIC) { ?> ================================================ FILE: newscoop/admin-files/article_types/fields/set_is_content.php ================================================ getService('translator'); if (!Saas::singleton()->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to delete article types.", array(), 'article_types')); exit; } if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $articleTypeName = Input::Get('f_article_type'); $articleTypeFieldName = Input::Get('f_field_name'); $isContent = Input::Get('f_is_content'); $errorMsgs = array(); $articleTypeField = new ArticleTypeField($articleTypeName, $articleTypeFieldName); $articleTypeField->setIsContent($isContent == 'true'); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); ?> ================================================ FILE: newscoop/admin-files/article_types/fields/set_show_in_editor.php ================================================ getService('translator'); if (!Saas::singleton()->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to delete article types.", array(), 'article_types')); exit; } if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $articleTypeName = Input::Get('f_article_type'); $articleTypeFieldName = Input::Get('f_field_name'); $showInEditor = Input::Get('f_show_in_editor'); $errorMsgs = array(); $articleTypeField = new ArticleTypeField($articleTypeName, $articleTypeFieldName); $articleTypeField->setShowInEditor($showInEditor == 'true'); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article_type'); camp_html_goto_page("/$ADMIN/article_types/fields/?f_article_type=".urlencode($articleTypeName)); ?> ================================================ FILE: newscoop/admin-files/article_types/index.php ================================================ getService('translator'); $request = \Zend_Registry::get('container')->get('request'); $locale = $request->getLocale(); if (!$g_user->hasPermission('ManageArticleTypes') && !$g_user->hasPermission('DeleteArticleTypes')) { camp_html_goto_page("/$ADMIN/"); } $articleTypes = ArticleType::GetArticleTypes(true); // return value is sorted by language $allLanguages = Language::GetLanguages(null, null, null, array(), array(), true); $lang = Language::GetLanguageByCode($locale); $languageObj = new Language($lang->getLanguageId()); $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), ""); $controller->view->headTitle($translator->trans('Article Types').' - Newscoop Admin', 'SET'); echo camp_html_breadcrumbs($crumbs); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); ?> hasPermission("ManageArticleTypes")) { ?>

    /add.png" BORDER="0"> trans("Add new article type"); ?>
    /merge.png" BORDER="0"> trans("Merge types", array(), 'article_types'); ?>
    '; document['show'].src='/viewmagminus.png'; } else { HideAll(type_ids); allShown = 0; document.getElementById('showtext').innerHTML = 'trans("Edit and translate human-readable field names", array(), 'article_types'); ?>'; document['show'].src='/viewmagplus.png'; }"> '; document['show'].src='/viewmagminus.png'; } else { HideAll(type_ids); allShown = 0; document.getElementById('showtext').innerHTML = 'trans("Edit and translate human-readable field names", array(), 'article_types'); ?>'; document['show'].src='/viewmagplus.png'; }">
    trans("Edit and translate human-readable field names", array(), 'article_types'); ?>

    0) { ?> hasPermission("DeleteArticleTypes")) { ?> getStatus() == 'hidden') { $hideShowText = $translator->trans('show', array(), 'article_types'); $hideShowStatus = 'show'; $hideShowImage = "is_hidden.png"; } else { $hideShowText = $translator->trans('hide', array(), 'article_types'); $hideShowStatus = 'hide'; $hideShowImage = "is_shown.png"; } if ($currentArticleType->commentsEnabled()) { $commentChangeText = $translator->trans('deactivate', array(), 'article_types'); $commentImage = "is_shown.png"; } else { $commentChangeText = $translator->trans('activate', array(), 'article_types'); $commentImage = "is_hidden.png"; } $filterChangeValue = 1; $filterChangeText = $translator->trans('filter', array(), 'article_types'); $filterImage = "is_shown.png"; if ($currentArticleType->getFilterStatus()) { $filterChangeValue = 0; $filterChangeText = $translator->trans('list', array(), 'article_types'); $filterImage = "is_hidden.png"; } ?> class="list_row_even"class="list_row_odd"> hasPermission("DeleteArticleTypes")) { ?>
    trans("Template Type Name", array(), 'article_types'); ?> trans("Fields"); ?> trans("Display Name", array(), 'article_types'); ?> trans("Translate"); ?> trans("Show to Authors?", array(), 'article_types'); ?> trans("Show in Article Lists?", array(), 'article_types'); ?> trans("Comments Enabled?", array(), 'article_types'); ?> trans("Delete"); ?>
      trans('Fields'); ?> getDisplayName($languageObj->getLanguageId()); ?> getDisplayNameLanguageCode($languageObj->getLanguageId()); ?>  /localizer.png" alt="trans("Translate"); ?>" title="trans("Translate"); ?>" border="0"> ');">/" BORDER="0" ALT="trans('$1 article type $2', array('$1' => ucfirst($hideShowText), '$2' => htmlspecialchars($articleType)), 'article_types'); ?>" TITLE="trans('$1 article type $2', array('$1' => ucfirst($hideShowText), '$2' => htmlspecialchars($articleType)), 'article_types'); ?>" > ');">/" BORDER="0" ALT="trans('$1 articles of article type $2', array('$1' => ucfirst($filterChangeText), '$2' => htmlspecialchars($articleType)), 'article_types'); ?>" TITLE="trans('$1 articles of article type $2', array('$1' => ucfirst($filterChangeText), '$2' => htmlspecialchars($articleType)), 'article_types'); ?>" > ');">/" BORDER="0" ALT="trans('$1 comments for article type $2', array('$1' => ucfirst($commentChangeText), '$2' => htmlspecialchars($articleType)), 'article_types'); ?>" TITLE="trans('$1 comments for article type $2', array('$1' => ucfirst($commentChangeText), '$2' => htmlspecialchars($articleType)), 'article_types'); ?>" > /delete.png" BORDER="0" ALT="trans('Delete article type $1', array('$1' => htmlspecialchars($articleType)), 'article_types'); ?>" TITLE="trans('Delete article type $1.', array('$1' => htmlspecialchars($articleType)), 'article_types'); ?>" >

  • trans('No article types.', array(), 'article_types'); ?>
  • ================================================ FILE: newscoop/admin-files/article_types/merge.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to merge article types.", array(), 'article_types')); exit; } $articleTypes = ArticleType::GetArticleTypes(); $f_src = trim(Input::get('f_src')); $f_dest = trim(Input::get('f_dest')); $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Merge article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans("Merge article type", array(), 'article_types').' - Newscoop Admin', 'SET'); ?>

    trans("Merge Article Types: Step $1 of $2", array('$1' => 1, '$2' => 3), 'article_types'); ?>
    trans("Source Article Type", array(), 'article_types'); ?> trans("Destination Article Type", array(), 'article_types'); ?>

    ================================================ FILE: newscoop/admin-files/article_types/merge2.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to merge article types.", array(), 'article_types')); exit; } $f_src = trim(Input::get('f_src')); $f_dest = trim(Input::get('f_dest')); $errorMsgs = array(); if ($f_src == $f_dest) { $errorMsgs[] = $translator->trans("You cannot merge the same type into itself.", array(), 'article_types'); } $src = new ArticleType($f_src); $dest = new ArticleType($f_dest); $srcNumArticles = $src->getNumArticles(); if ($srcNumArticles <= 0) { $errorMsgs[] = $translator->trans("The source article type ($1) does not have any articles.", array('$1' => $f_src), 'article_types'); } if (count($errorMsgs)) { $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Merge article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Merge Article Types: Step $1 of $2", array('$1' => 1, '$2' => 3), 'article_types'); ?>
    ".$errorMsg.""; } ?>

    trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Merge article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Merge Article Types: Step $1 of $2", array('$1' => 2, '$2' => 3), 'article_types'); ?>
    getUserDefinedColumns(null, true, true) as $destColumn) { ?>
    trans("There are $1 articles associated with $2 that will be merged.", array('$1' => $srcNumArticles, '$2' =>$src->getDisplayName()), 'article_types');?>
    trans("Source Article Type", array(), 'article_types');?> trans("Destination Article Type", array(), 'article_types'); ?>
    getDisplayName(); ?> -> getDisplayName(); ?>
    -> getDisplayName(); ?>
        

    ================================================ FILE: newscoop/admin-files/article_types/merge3.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to merge article types.", array(), 'article_types')); exit; } $f_src = trim(Input::get('f_src')); $f_dest = trim(Input::get('f_dest')); $f_prev_action = trim(Input::get('f_action', 'string', 'NULL')); // Preview actions: either NEXT, PREV, ORIG $f_action = trim(Input::get('f_action')); // either Step1, Step2, Preview or Merge if ($f_action == 'Step1') { camp_html_goto_page("/$ADMIN/article_types/merge.php?f_src=$f_src&f_dest=$f_dest"); } $src = new ArticleType($f_src); $dest = new ArticleType($f_dest); $getString = ''; foreach ($dest->getUserDefinedColumns(null, true, true) as $destColumn) { $getString .= "&f_src_". $destColumn->getPrintName() ."=". trim(Input::get('f_src_'. $destColumn->getPrintName())); } if ($f_action == 'Step2') { camp_html_goto_page("/$ADMIN/article_types/merge2.php?f_src=$f_src&f_dest=$f_dest". $getString); } foreach ($dest->getUserDefinedColumns(null, true, true) as $destColumn) { $tmp = trim(Input::get('f_src_'. $destColumn->getPrintName())); if (empty($tmp)) { $tmp = 'NULL'; } $f_src_c[$destColumn->getPrintName()] = $tmp; } // Verify the merge rules $ok = true; $errMsgs = array(); foreach ($f_src_c as $destColumn => $srcColumn) { if ($srcColumn == 'NULL') { continue; } $destATF = new ArticleTypeField($f_dest, $destColumn); $srcATF = new ArticleTypeField($f_src, $srcColumn); if (!$destATF->isConvertibleFrom($srcATF)) { $errMsgs[] = $translator->trans('Cannot merge a $1 field ($2) into a $3 field ($4).', array( '$1' => $translator->trans($srcATF->getType()), '$2' => $srcATF->getDisplayName(), '$3' => $translator->trans($destATF->getType()), '$4' => $destATF->getDisplayName() ), 'article_types'); $ok = false; } } // // if f_action is Merge, do the merge and return them to article_types/ screen (or an error) // if ($ok && $f_action == 'Merge') { if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $res = ArticleType::merge($f_src, $f_dest, $f_src_c); if (!$res) { $errMsgs[] = $translator->trans("Merge failed.", array(), 'article_types'); $ok = false; } if ($ok) { $f_delete = Input::get('f_delete', 'checkbox', 0); if ($f_delete) { // delete the source article type $at = new ArticleType($f_src); $at->delete(); } camp_html_goto_page("/$ADMIN/article_types/"); exit(0); } } // // Otherwise, we are in preview mode, so render up a preview // if ($ok) { // // calculate where this article is in relation to all the articles of the src type // $articlesArray = $src->getArticlesArray(); if (!count($articlesArray)) { $errMsgs[] = $translator->trans("No articles."); $ok = false; } if ($ok) { $f_cur_preview = trim(Input::get('f_cur_preview', 'int', $articlesArray[0])); // The currently previewed article $tmp = array_keys($articlesArray, $f_cur_preview); $curPos = $tmp[0]; // used for calculating the next / prev arrows // calculate the first language of an article number // and also the number of translations associated with an article number global $g_ado_db; $sql = "SELECT * FROM X$f_src WHERE NrArticle=$f_cur_preview"; $rows = $g_ado_db->GetAll($sql); if (!count($rows)) { $errMsgs[] = $translator->trans('There is no article associated with the preview.', array(), 'article_types'); $ok = false; } } if ($ok) { $numberOfTranslations = count($rows); $firstLanguage = $rows[0]['IdLanguage']; $curPreview = new Article($firstLanguage, $f_cur_preview); $articleCreator = new User($curPreview->getCreatorId()); $articleData = $dest->getPreviewArticleData(); $dbColumns = $articleData->getUserDefinedColumns(1, true); $srcArticleData = $curPreview->getArticleData(); $srcDbColumns = $srcArticleData->getUserDefinedColumns(1, true); $getString = ''; foreach ($_GET as $k => $v) { if ( ($k != 'f_action') && ($k != 'f_preview_action') ) { $getString .= "&$k=$v"; } } foreach ($_POST as $k => $v) { if ( ($k != 'f_action') && ($k != 'f_prev_action') ) { $getString .= "&$k=$v"; } } $getString = substr($getString, 1); $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Merge article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Merge Article Types: Step $1 of $2", array('$1' => 3, '$2' => 3), 'article_types'); ?>
    trans("Merge configuration for merging $1 into $2.", array('$1' => $src->getDisplayName(), '$2' => $dest->getDisplayName()), 'article_types'); ?>
      $srcColumn) { $tmp = array_keys($f_src_c, $srcColumn); if ($srcColumn == 'NULL') { ?>
    • trans("Merge $1 into $2", array('$1' => "".$translator->trans("NOTHING", array(), 'article_types')."", '$2' => "". $destColumn .""), 'article_types'); ?> trans("(Null merge warning.)", array(), 'article_types'); ?>
    • 1) { ?>
    • trans("Merge $1 into $2", array('$1' => "".$srcColumn."", '$2' => "". $destColumn .""), 'article_types'); ?> trans("(Duplicate warning.)", array(), 'article_types'); ?>
    • trans("Merge $1 into $2", array('$1' => "".$srcColumn."", '$2' => "". $destColumn .""), 'article_types'); ?>
    • getUserDefinedColumns(null, true, true) as $srcColumn) { if (array_search($srcColumn->getPrintName(), $f_src_c) === false) { ?>
    • trans("(!) Do NOT merge $1", array('$1' => "". $srcColumn->getPrintName() .""), 'article_types'); ?> trans("(No merge warning.)", array(), 'article_types'); ?>
    trans("Preview a sample of the merge configuration.", array(), 'article_types'); ?> trans("Cycle through your articles to verify that the merge configuration is correct.", array(), 'article_types'); ?>
    trans("View of original ($1) $2", array('$1' => htmlspecialchars($curPreview->getType()), '$2' => $curPreview->getTitle()), 'article_types'); ?> ( trans("To return to the preview click here", array(), 'article_types'); ?>) trans("Preview of $1", array('$1' => wordwrap(htmlspecialchars($curPreview->getTitle()), 60, '
    ')), 'article_types'); ?> (trans("View the source ($1) version of $2", array('$1' => $src->getDisplayName(), '$2' => wordwrap(htmlspecialchars($curPreview->getTitle()), 60, '
    ')), 'article_types'); ?>
    ) trans("$1 of $2", array('$1' => $curPos + 1, '$2' => count($articlesArray)), 'article_types'); ?>. /previous.png" BORDER="0">  /next.png" BORDER="0">
    trans("This is the first translation of $1", array('$1' => $numberOfTranslations), 'article_types'); ?>
    trans("Name"); ?>: getTitle()), 60, "
    "); ?>
    trans("Created by"); ?>: getRealName())); ?> trans('Show article on front page', array(), 'article_types'); ?>
    trans("Type"); ?>: getDisplayName()); ?> trans("Creation date"); ?>: getCreationDate(); ?> trans('Show article on section page', array(), 'article_types'); ?>
    trans("Number"); ?>: getArticleNumber()); ?> getUrlTypeId() == 2) { ?>  (getUrlName()."/".$sectionObj->getUrlName()."/".$curPreview->getUrlName(); ?>">trans("Link to public page", array(), 'article_types'); ?>) trans("Publish date", array(), 'article_types'); ?>: getPublishDate()); ?> trans('Allow users without subscriptions to view the article', array(), 'article_types'); ?>
    getProperty($dbColumn->getName()); } elseif ($f_src_c[$dbColumn->getPrintName()] != 'NULL') { $text = $srcArticleData->getProperty('F'. $f_src_c[$dbColumn->getPrintName()]); } else { $text = ''; } if ($dbColumn->getType() == ArticleTypeField::TYPE_TEXT) { // Single line text fields ?> getType() == ArticleTypeField::TYPE_DATE) { // Date fields ?> getType() == ArticleTypeField::TYPE_BODY) { // Multiline text fields // Transform Campsite-specific tags into editor-friendly tags. // Subheads $text = preg_replace("//i", "", $text); $text = preg_replace("//i", "", $text); // Internal Links with targets $text = preg_replace("//i", '', $text); // Internal Links without targets $text = preg_replace("//i", '', $text); // End link $text = preg_replace("//i", "", $text); // Images preg_match_all("/getProperty('NrArticle'), null, $templateId); $image = new Image($articleImage->getImageId()); $imageUrl = $image->getImageUrl(); $text = preg_replace("/getType() == ArticleTypeField::TYPE_TOPIC) { ?> getType() == ArticleTypeField::TYPE_SWITCH) { try { $checked = $srcArticleData->getFieldValue($dbColumn->getPrintName()) ? 'checked' : ''; } catch (\InvalidPropertyException $e) { $checked = ''; } ?>
    trans("Keywords"); ?>: getKeywords()); ?>
    getDisplayName()); ?>:
    getDisplayName()); ?>: trans('YYYY-MM-DD'); ?>
    getDisplayName()); ?>:
    bgcolor="#EEEEEE">
    getDisplayName()); ?>: getService('em'); $repository = $em->getRepository('Newscoop\NewscoopBundle\Entity\Topic'); $topic = $repository->getTopicByIdOrName((int)$text, camp_session_get('LoginLanguageId', 1))->getOneOrNullResult(); if ($topic) { echo $topic->getTitle(); } ?>
    getDisplayName()); ?>: class="input_checkbox" name="getName(); ?>" id="getName(); ?>" disabled>
    trans("Delete the source article type ($1) when finished.", array('$1' => $src->getDisplayName()), 'article_types'); ?> trans('Clicking "Merge" will merge ($1) article(s).', array('$1' => $src->getNumArticles()), 'article_types'); ?>
    getUserDefinedColumns(null, true, true) as $destColumn) { ?>

    trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Merge article type", array(), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); ?>

    trans("Merge article type", array(), 'article_types'); ?>
    ".$errorMsg.""; } ?>

    ================================================ FILE: newscoop/admin-files/article_types/rename.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManageArticleTypes')) { camp_html_display_error($translator->trans("You do not have the right to rename article types.", array(), 'article_types')); exit; } $articleTypes = ArticleType::GetArticleTypes(true); $f_name = trim(Input::get('f_name')); if (array_search($f_name, $articleTypes) === false) { camp_html_display_error($translator->trans("Invalid article type $1.", array('$1' => "'".$f_name."'"), 'article_types')); exit; } $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Article Types"), "/$ADMIN/article_types/"); $crumbs[] = array($translator->trans("Rename article type $1", array('$1' => "'".$f_name."'"), 'article_types'), ""); echo camp_html_breadcrumbs($crumbs); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); ?>

    trans('The template name may only contain letters and the underscore (_) character.', array(), 'article_types'); ?>
    trans("Template Type Name", array(), 'article_types'); ?>: " SIZE="15" MAXLENGTH="15">

    ================================================ FILE: newscoop/admin-files/articles/JSON.php ================================================ * @author Matt Knapp * @author Brett Stimmerman * @copyright 2005 Michal Migurski * @version CVS: $Id: JSON.php,v 1.1 2007/07/24 18:36:02 davglass Exp $ * @license http://www.opensource.org/licenses/bsd-license.php * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 */ /** * Marker constant for Services_JSON::decode(), used to flag stack state */ define('SERVICES_JSON_SLICE', 1); /** * Marker constant for Services_JSON::decode(), used to flag stack state */ define('SERVICES_JSON_IN_STR', 2); /** * Marker constant for Services_JSON::decode(), used to flag stack state */ define('SERVICES_JSON_IN_ARR', 3); /** * Marker constant for Services_JSON::decode(), used to flag stack state */ define('SERVICES_JSON_IN_OBJ', 4); /** * Marker constant for Services_JSON::decode(), used to flag stack state */ define('SERVICES_JSON_IN_CMT', 5); /** * Behavior switch for Services_JSON::decode() */ define('SERVICES_JSON_LOOSE_TYPE', 16); /** * Behavior switch for Services_JSON::decode() */ define('SERVICES_JSON_SUPPRESS_ERRORS', 32); /** * Converts to and from JSON format. * * Brief example of use: * * * // create a new instance of Services_JSON * $json = new Services_JSON(); * * // convert a complexe value to JSON notation, and send it to the browser * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); * $output = $json->encode($value); * * print($output); * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] * * // accept incoming POST data, assumed to be in JSON notation * $input = file_get_contents('php://input', 1000000); * $value = $json->decode($input); * */ class Services_JSON { /** * constructs a new JSON instance * * @param int $use object behavior flags; combine with boolean-OR * * possible values: * - SERVICES_JSON_LOOSE_TYPE: loose typing. * "{...}" syntax creates associative arrays * instead of objects in decode(). * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. * Values which can't be encoded (e.g. resources) * appear as NULL instead of throwing errors. * By default, a deeply-nested resource will * bubble up with an error, so all return values * from encode() should be checked with isError() */ function Services_JSON($use = 0) { $this->use = $use; } /** * convert a string from one UTF-16 char to one UTF-8 char * * Normally should be handled by mb_convert_encoding, but * provides a slower PHP-only method for installations * that lack the multibye string extension. * * @param string $utf16 UTF-16 character * @return string UTF-8 character * @access private */ function utf162utf8($utf16) { // oh please oh please oh please oh please oh please if(function_exists('mb_convert_encoding')) { return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); } $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); switch(true) { case ((0x7F & $bytes) == $bytes): // this case should never be reached, because we are in ASCII range // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0x7F & $bytes); case (0x07FF & $bytes) == $bytes: // return a 2-byte UTF-8 character // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0xC0 | (($bytes >> 6) & 0x1F)) . chr(0x80 | ($bytes & 0x3F)); case (0xFFFF & $bytes) == $bytes: // return a 3-byte UTF-8 character // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0xE0 | (($bytes >> 12) & 0x0F)) . chr(0x80 | (($bytes >> 6) & 0x3F)) . chr(0x80 | ($bytes & 0x3F)); } // ignoring UTF-32 for now, sorry return ''; } /** * convert a string from one UTF-8 char to one UTF-16 char * * Normally should be handled by mb_convert_encoding, but * provides a slower PHP-only method for installations * that lack the multibye string extension. * * @param string $utf8 UTF-8 character * @return string UTF-16 character * @access private */ function utf82utf16($utf8) { // oh please oh please oh please oh please oh please if(function_exists('mb_convert_encoding')) { return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); } switch(strlen($utf8)) { case 1: // this case should never be reached, because we are in ASCII range // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return $utf8; case 2: // return a UTF-16 character from a 2-byte UTF-8 char // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr(0x07 & (ord($utf8{0}) >> 2)) . chr((0xC0 & (ord($utf8{0}) << 6)) | (0x3F & ord($utf8{1}))); case 3: // return a UTF-16 character from a 3-byte UTF-8 char // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 return chr((0xF0 & (ord($utf8{0}) << 4)) | (0x0F & (ord($utf8{1}) >> 2))) . chr((0xC0 & (ord($utf8{1}) << 6)) | (0x7F & ord($utf8{2}))); } // ignoring UTF-32 for now, sorry return ''; } /** * encodes an arbitrary variable into JSON format * * @param mixed $var any number, boolean, string, array, or object to be encoded. * see argument 1 to Services_JSON() above for array-parsing behavior. * if var is a strng, note that encode() always expects it * to be in ASCII or UTF-8 format! * * @return mixed JSON string representation of input var or an error if a problem occurs * @access public */ function encode($var) { switch (gettype($var)) { case 'boolean': return $var ? 'true' : 'false'; case 'NULL': return 'null'; case 'integer': return (int) $var; case 'double': case 'float': return (float) $var; case 'string': // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT $ascii = ''; $strlen_var = strlen($var); /* * Iterate over every character in the string, * escaping with a slash or encoding to UTF-8 where necessary */ for ($c = 0; $c < $strlen_var; ++$c) { $ord_var_c = ord($var{$c}); switch (true) { case $ord_var_c == 0x08: $ascii .= '\b'; break; case $ord_var_c == 0x09: $ascii .= '\t'; break; case $ord_var_c == 0x0A: $ascii .= '\n'; break; case $ord_var_c == 0x0C: $ascii .= '\f'; break; case $ord_var_c == 0x0D: $ascii .= '\r'; break; case $ord_var_c == 0x22: case $ord_var_c == 0x2F: case $ord_var_c == 0x5C: // double quote, slash, slosh $ascii .= '\\'.$var{$c}; break; case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): // characters U-00000000 - U-0000007F (same as ASCII) $ascii .= $var{$c}; break; case (($ord_var_c & 0xE0) == 0xC0): // characters U-00000080 - U-000007FF, mask 110XXXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c, ord($var{$c + 1})); $c += 1; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16)); break; case (($ord_var_c & 0xF0) == 0xE0): // characters U-00000800 - U-0000FFFF, mask 1110XXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c, ord($var{$c + 1}), ord($var{$c + 2})); $c += 2; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16)); break; case (($ord_var_c & 0xF8) == 0xF0): // characters U-00010000 - U-001FFFFF, mask 11110XXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c, ord($var{$c + 1}), ord($var{$c + 2}), ord($var{$c + 3})); $c += 3; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16)); break; case (($ord_var_c & 0xFC) == 0xF8): // characters U-00200000 - U-03FFFFFF, mask 111110XX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c, ord($var{$c + 1}), ord($var{$c + 2}), ord($var{$c + 3}), ord($var{$c + 4})); $c += 4; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16)); break; case (($ord_var_c & 0xFE) == 0xFC): // characters U-04000000 - U-7FFFFFFF, mask 1111110X // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $char = pack('C*', $ord_var_c, ord($var{$c + 1}), ord($var{$c + 2}), ord($var{$c + 3}), ord($var{$c + 4}), ord($var{$c + 5})); $c += 5; $utf16 = $this->utf82utf16($char); $ascii .= sprintf('\u%04s', bin2hex($utf16)); break; } } return '"'.$ascii.'"'; case 'array': /* * As per JSON spec if any array key is not an integer * we must treat the the whole array as an object. We * also try to catch a sparsely populated associative * array with numeric keys here because some JS engines * will create an array with empty indexes up to * max_index which can cause memory issues and because * the keys, which may be relevant, will be remapped * otherwise. * * As per the ECMA and JSON specification an object may * have any string as a property. Unfortunately due to * a hole in the ECMA specification if the key is a * ECMA reserved word or starts with a digit the * parameter is only accessible using ECMAScript's * bracket notation. */ // treat as a JSON object if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { $properties = array_map(array($this, 'name_value'), array_keys($var), array_values($var)); foreach($properties as $property) { if(Services_JSON::isError($property)) { return $property; } } return '{' . join(',', $properties) . '}'; } // treat it like a regular array $elements = array_map(array($this, 'encode'), $var); foreach($elements as $element) { if(Services_JSON::isError($element)) { return $element; } } return '[' . join(',', $elements) . ']'; case 'object': $vars = get_object_vars($var); $properties = array_map(array($this, 'name_value'), array_keys($vars), array_values($vars)); foreach($properties as $property) { if(Services_JSON::isError($property)) { return $property; } } return '{' . join(',', $properties) . '}'; default: return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) ? 'null' : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); } } /** * array-walking function for use in generating JSON-formatted name-value pairs * * @param string $name name of key to use * @param mixed $value reference to an array element to be encoded * * @return string JSON-formatted name-value pair, like '"name":value' * @access private */ function name_value($name, $value) { $encoded_value = $this->encode($value); if(Services_JSON::isError($encoded_value)) { return $encoded_value; } return $this->encode(strval($name)) . ':' . $encoded_value; } /** * reduce a string by removing leading and trailing comments and whitespace * * @param $str string string value to strip of comments and whitespace * * @return string string value stripped of comments and whitespace * @access private */ function reduce_string($str) { $str = preg_replace(array( // eliminate single line comments in '// ...' form '#^\s*//(.+)$#m', // eliminate multi-line comments in '/* ... */' form, at start of string '#^\s*/\*(.+)\*/#Us', // eliminate multi-line comments in '/* ... */' form, at end of string '#/\*(.+)\*/\s*$#Us' ), '', $str); // eliminate extraneous space return trim($str); } /** * decodes a JSON string into appropriate variable * * @param string $str JSON-formatted string * * @return mixed number, boolean, string, array, or object * corresponding to given JSON input string. * See argument 1 to Services_JSON() above for object-output behavior. * Note that decode() always returns strings * in ASCII or UTF-8 format! * @access public */ function decode($str) { $str = $this->reduce_string($str); switch (strtolower($str)) { case 'true': return true; case 'false': return false; case 'null': return null; default: $m = array(); if (is_numeric($str)) { // Lookie-loo, it's a number // This would work on its own, but I'm trying to be // good about returning integers where appropriate: // return (float)$str; // Return float or int, as appropriate return ((float)$str == (integer)$str) ? (integer)$str : (float)$str; } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { // STRINGS RETURNED IN UTF-8 FORMAT $delim = substr($str, 0, 1); $chrs = substr($str, 1, -1); $utf8 = ''; $strlen_chrs = strlen($chrs); for ($c = 0; $c < $strlen_chrs; ++$c) { $substr_chrs_c_2 = substr($chrs, $c, 2); $ord_chrs_c = ord($chrs{$c}); switch (true) { case $substr_chrs_c_2 == '\b': $utf8 .= chr(0x08); ++$c; break; case $substr_chrs_c_2 == '\t': $utf8 .= chr(0x09); ++$c; break; case $substr_chrs_c_2 == '\n': $utf8 .= chr(0x0A); ++$c; break; case $substr_chrs_c_2 == '\f': $utf8 .= chr(0x0C); ++$c; break; case $substr_chrs_c_2 == '\r': $utf8 .= chr(0x0D); ++$c; break; case $substr_chrs_c_2 == '\\"': case $substr_chrs_c_2 == '\\\'': case $substr_chrs_c_2 == '\\\\': case $substr_chrs_c_2 == '\\/': if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || ($delim == "'" && $substr_chrs_c_2 != '\\"')) { $utf8 .= $chrs{++$c}; } break; case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): // single, escaped unicode character $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) . chr(hexdec(substr($chrs, ($c + 4), 2))); $utf8 .= $this->utf162utf8($utf16); $c += 5; break; case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): $utf8 .= $chrs{$c}; break; case ($ord_chrs_c & 0xE0) == 0xC0: // characters U-00000080 - U-000007FF, mask 110XXXXX //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $utf8 .= substr($chrs, $c, 2); ++$c; break; case ($ord_chrs_c & 0xF0) == 0xE0: // characters U-00000800 - U-0000FFFF, mask 1110XXXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $utf8 .= substr($chrs, $c, 3); $c += 2; break; case ($ord_chrs_c & 0xF8) == 0xF0: // characters U-00010000 - U-001FFFFF, mask 11110XXX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $utf8 .= substr($chrs, $c, 4); $c += 3; break; case ($ord_chrs_c & 0xFC) == 0xF8: // characters U-00200000 - U-03FFFFFF, mask 111110XX // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $utf8 .= substr($chrs, $c, 5); $c += 4; break; case ($ord_chrs_c & 0xFE) == 0xFC: // characters U-04000000 - U-7FFFFFFF, mask 1111110X // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 $utf8 .= substr($chrs, $c, 6); $c += 5; break; } } return $utf8; } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { // array, or object notation if ($str{0} == '[') { $stk = array(SERVICES_JSON_IN_ARR); $arr = array(); } else { if ($this->use & SERVICES_JSON_LOOSE_TYPE) { $stk = array(SERVICES_JSON_IN_OBJ); $obj = array(); } else { $stk = array(SERVICES_JSON_IN_OBJ); $obj = new stdClass(); } } array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => 0, 'delim' => false)); $chrs = substr($str, 1, -1); $chrs = $this->reduce_string($chrs); if ($chrs == '') { if (reset($stk) == SERVICES_JSON_IN_ARR) { return $arr; } else { return $obj; } } //print("\nparsing {$chrs}\n"); $strlen_chrs = strlen($chrs); for ($c = 0; $c <= $strlen_chrs; ++$c) { $top = end($stk); $substr_chrs_c_2 = substr($chrs, $c, 2); if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { // found a comma that is not inside a string, array, etc., // OR we've reached the end of the character list $slice = substr($chrs, $top['where'], ($c - $top['where'])); array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); if (reset($stk) == SERVICES_JSON_IN_ARR) { // we are in an array, so just push an element onto the stack array_push($arr, $this->decode($slice)); } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { // we are in an object, so figure // out the property name and set an // element in an associative array, // for now $parts = array(); if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { // "name":value pair $key = $this->decode($parts[1]); $val = $this->decode($parts[2]); if ($this->use & SERVICES_JSON_LOOSE_TYPE) { $obj[$key] = $val; } else { $obj->$key = $val; } } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { // name:value pair, where name is unquoted $key = $parts[1]; $val = $this->decode($parts[2]); if ($this->use & SERVICES_JSON_LOOSE_TYPE) { $obj[$key] = $val; } else { $obj->$key = $val; } } } } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { // found a quote, and we are not inside a string array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); //print("Found start of string at {$c}\n"); } elseif (($chrs{$c} == $top['delim']) && ($top['what'] == SERVICES_JSON_IN_STR) && ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { // found a quote, we're in a string, and it's not escaped // we know that it's not escaped becase there is _not_ an // odd number of backslashes at the end of the string so far array_pop($stk); //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); } elseif (($chrs{$c} == '[') && in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a left-bracket, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); //print("Found start of array at {$c}\n"); } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { // found a right-bracket, and we're in an array array_pop($stk); //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); } elseif (($chrs{$c} == '{') && in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a left-brace, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); //print("Found start of object at {$c}\n"); } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { // found a right-brace, and we're in an object array_pop($stk); //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); } elseif (($substr_chrs_c_2 == '/*') && in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { // found a comment start, and we are in an array, object, or slice array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); $c++; //print("Found start of comment at {$c}\n"); } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { // found a comment end, and we're in one now array_pop($stk); $c++; for ($i = $top['where']; $i <= $c; ++$i) $chrs = substr_replace($chrs, ' ', $i, 1); //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); } } if (reset($stk) == SERVICES_JSON_IN_ARR) { return $arr; } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { return $obj; } } } } /** * @todo Ultimately, this should just call PEAR::isError() */ function isError($data, $code = null) { if (class_exists('pear')) { return PEAR::isError($data, $code); } elseif (is_object($data) && (get_class($data) == 'services_json_error' || is_subclass_of($data, 'services_json_error'))) { return true; } return false; } } if (class_exists('PEAR_Error')) { class Services_JSON_Error extends PEAR_Error { function Services_JSON_Error($message = 'unknown error', $code = null, $mode = null, $options = null, $userinfo = null) { parent::PEAR_Error($message, $code, $mode, $options, $userinfo); } } } else { /** * @todo Ultimately, this class shall be descended from PEAR_Error */ class Services_JSON_Error { function Services_JSON_Error($message = 'unknown error', $code = null, $mode = null, $options = null, $userinfo = null) { } } } ?> ================================================ FILE: newscoop/admin-files/articles/add.php ================================================ getService('translator'); global $Campsite; if (!$g_user->hasPermission('AddArticle')) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } // Only for use when in the article screens. $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); // The article location dropdowns cause this page to reload, // so we need to preserve the state with each refresh. $f_article_name = Input::Get('f_article_name', 'string', '', true); $f_article_type = Input::Get('f_article_type', 'string', '', true); $f_article_language = Input::Get('f_article_language', 'int', $f_language_id, true); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } // Only for the article screens. $publicationObj = null; $issueObj = null; $sectionObj = null; if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); if (($f_issue_number > 0) && ($f_article_language > 0)) { $issueObj = new Issue($f_publication_id, $f_article_language, $f_issue_number); if ($f_section_number > 0) { $sectionObj = new Section($f_publication_id, $f_issue_number, $f_article_language, $f_section_number); } } } // Only show the languages for sections which have been translated. $sections = Section::GetSections($f_publication_id, $f_issue_number, null, null, null, null, true); $languageIds = DbObjectArray::GetColumn($sections, 'IdLanguage'); $allLanguages = array(); foreach ($languageIds as $languageId) { if (!isset($allLanguages[$languageId])) { $allLanguages[$languageId] = new Language($languageId); } } $allArticleTypes = ArticleType::GetArticleTypes(); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans('Add new article'), $topArray, true, false, array($translator->trans("Articles") => "/$ADMIN/articles/?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_language_id=$f_language_id")); $controller->view->headTitle($translator->trans('Add new article').' - Newscoop Admin', 'SET'); ?>
    ">/left_arrow.png" BORDER="0"> ">trans("Article List", array(), 'articles'); ?>

    trans("No article types were defined. You must create an article type first.", array(), 'articles'); ?>

    trans("Edit article types", array(), 'articles'); ?>

    0) { ?> 0) { ?> 0) { ?> 0) { ?>
    trans("Add new article"); ?>
    trans("Name"); ?>:
    trans("Type"); ?>: getDisplayName($f_language_id); } else { ?>
    trans("Language"); ?>: 1) { ?> '.htmlspecialchars($tmpLanguage->getNativeName()).''; ?>

    ================================================ FILE: newscoop/admin-files/articles/add_move.php ================================================ getService('translator'); $publications = Publication::GetPublications(); global $Campsite; if (!$g_user->hasPermission('AddArticle')) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } // The article location dropdowns cause this page to reload, // so we need to preserve the state with each refresh. $f_article_name = Input::Get('f_article_name', 'string', '', true); $f_article_type = Input::Get('f_article_type', 'string', '', true); $f_article_language = Input::Get('f_article_language', 'int', 0, true); // For choosing the article location. $f_destination_publication_id = Input::Get('f_destination_publication_id', 'int', 0, true); $f_destination_issue_number = Input::Get('f_destination_issue_number', 'int', 0, true); $f_destination_section_number = Input::Get('f_destination_section_number', 'int', 0, true); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } if ($f_article_language <= 0) { $f_destination_publication_id = 0; $f_destination_issue_number = 0; $f_destination_section_number = 0; } if (count($publications) == 1) { $singlePublication = camp_array_peek($publications); $f_destination_publication_id = $singlePublication->getPublicationId(); } $allIssues = array(); if ($f_destination_publication_id > 0) { $allIssues = Issue::GetIssues($f_destination_publication_id, $f_article_language, null, null, null, false, array("ORDER BY" => array("Number" => "DESC")), true); if (count($allIssues) == 1) { $singleIssue = camp_array_peek($allIssues); $f_destination_issue_number = $singleIssue->getIssueNumber(); $f_article_language = $singleIssue->getLanguageId(); } } $allSections = array(); if ($f_destination_issue_number > 0) { $selectedIssue = new Issue($f_destination_publication_id, $f_article_language, $f_destination_issue_number); $allSections = Section::GetSections($f_destination_publication_id, $f_destination_issue_number, $f_article_language, null, null, array("ORDER BY" => array("Name" => "ASC")), true); if (count($allSections) == 1) { $singleSection = camp_array_peek($allSections); $f_destination_section_number = $singleSection->getSectionNumber(); } } $allArticleTypes = ArticleType::GetArticleTypes(); $allLanguages = Language::GetLanguages(null, null, null, array(), array(), true); $crumbs = array(); $crumbs[] = array($translator->trans("Actions"), ""); $crumbs[] = array($translator->trans("Add new article"), ""); echo camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans('Add new article').' - Newscoop Admin', 'SET'); ?>

    trans("No article types were defined. You must create an article type first.", array(), 'articles'); ?>

    trans("Edit article types", array(), 'articles'); ?>

    hasPermission("MoveArticle")) { ?>
    trans("Add new article"); ?>
    trans("Title", array(), 'api'); ?>:
    trans("Type"); ?>: getDisplayName($f_article_language); } else { ?>
    trans("Language"); ?>:
    trans("Select section:", array(), 'articles'); ?> trans("(optional)"); ?>
    trans('Publication'); ?>: getName()); ?>
    trans('Issue'); ?>: 0) && (count($allIssues) > 0)) { if (count($allIssues) == 1) { echo htmlspecialchars($singleIssue->getName()); ?> trans('No issues'); } ?>
    trans('Section'); ?>: 0) && (count($allIssues) > 0) && ($f_destination_issue_number > 0) && (count($allSections) > 0)) { if (count($allSections) == 1) { echo htmlspecialchars($singleSection->getName()); ?> trans('No sections'); } ?>

    >

    ================================================ FILE: newscoop/admin-files/articles/article_common.php ================================================ ================================================ FILE: newscoop/admin-files/articles/article_stylesheet.css ================================================ .campsite_subhead { border: 1px dashed #444444; padding: 2px; } .campsite_external_link { text-decoration: underline; color: blue; } .swiss-info-free, .largebox, .smallbox, .interview-box, .camp-textbox { display: block; border: 1px solid #000; padding: 10px; margin-top: 10px; margin-bottom: 24px; font-size: 15px !important; font-style: normal; font-family: Arial, Helvetica, sans-serif !important; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .camp_snippet { display: block; text-align: center; border: 1px solid #000; padding: 10px; margin-top: 10px; margin-bottom: 24px; font-size: 15px !important; font-style: normal; font-family: Arial, Helvetica, sans-serif !important; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; opacity: 0.5; background: #CCC; } .interview-box { border-color: #007fb3; } .smallbox { width: 250px; margin-left: 20px; float: right; } ================================================ FILE: newscoop/admin-files/articles/autopublish.php ================================================ getService('translator'); if (!$g_user->hasPermission("Publish")) { camp_html_display_error($translator->trans("You do not have the right to schedule issues or articles for automatic publishing.")); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } if ($f_publication_id == 0 || $f_issue_number == 0 || $f_section_number == 0) { camp_html_display_error($translator->trans('You must set the publication, issue, and section for this article before you can schedule it for publishing. Go to the "$1" menu and select "$2" to do this.', array('$1' => $translator->trans("Actions")."...", '$2' => $translator->trans("Move")), 'articles'), null, true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article does not exist.'), null, true); exit; } $BackLink = camp_html_article_url($articleObj, $f_language_id, "edit.php"); $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.'), $BackLink, true); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.'), $BackLink); exit; } $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.'), $BackLink, true); exit; } $articleEvents = ArticlePublish::GetArticleEvents($f_article_number, $f_language_selected); $publishTime = date("Y-m-d H:i"); if ($articleObj->getWorkflowStatus() != 'N') { $publishAction = ''; $frontPageAction = ''; $sectionPageAction = ''; $datetime = explode(" ", trim($publishTime)); $publishDate = $datetime[0]; $publishTime = explode(":", trim($datetime[1])); $publishHour = $publishTime[0]; $publishMinute = $publishTime[1]; ?> <?php echo $translator->trans("Attach Topic To Article", array(), 'articles'); ?>

    getService('user')->getCurrentUser(); $blogService = \Zend_Registry::get('container')->getService('blog'); if (!$blogService->isBlogger($user)) { ?>
    trans("Schedule a new action"); ?>
    trans("Date"); ?>: " emsg="trans('You must fill in the $1 field.', array('$1' => "'".$translator->trans('Date')."'")); ?> trans("The date must be in the future."); ?>" />
    trans("Time"); ?>: trans('Time')."'")); ?>"> : trans('Time')."'")); ?>">
    trans("Actions"); ?>
    trans("Publish"); ?>:
    trans("Front page"); ?>:
    trans("Section page"); ?>:
       " class="button" onclick="parent.$.fancybox.close(); return false;" />
    trans("Scheduling a new publish action"); ?>
    trans("The article is new, it is not possible to schedule it for automatic publishing.", array(), 'articles');?>
    ================================================ FILE: newscoop/admin-files/articles/autopublish_del.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission("Publish")) { camp_html_display_error($translator->trans("You do not have the right to schedule issues or articles for automatic publishing.", array(), 'articles')); exit; } $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_event_id = Input::Get('f_event_id', 'int', 0); $BackLink = Input::Get('Back', 'string', "/$ADMIN/articles/index.php", true); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article does not exist.'), $BackLink); exit; } $articlePublishObj = new ArticlePublish($f_event_id); if ($articlePublishObj->exists()) { $articlePublishObj->delete(); } camp_html_add_msg($translator->trans("Scheduled action deleted.", array(), 'articles'), "ok"); $redirect = camp_html_article_url($articleObj, $f_language_id, "edit.php"); camp_html_goto_page($redirect); ?> ================================================ FILE: newscoop/admin-files/articles/autopublish_do_add.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission("Publish")) { camp_html_display_error($translator->trans("You do not have the right to schedule issues or articles for automatic publishing.", array(), 'articles')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_publish_date = trim(Input::Get('f_publish_date', 'string', '', true)); $f_publish_hour = trim(Input::Get('f_publish_hour', 'int', '', true)); $f_publish_minute = trim(Input::Get('f_publish_minute', 'int', '', true)); $f_publish_action = Input::Get('f_publish_action', 'string', '', true); $f_front_page_action = Input::Get('f_front_page_action', 'string', '', true); $f_section_page_action = Input::Get('f_section_page_action', 'string', '', true); $f_article_code = Input::Get('f_article_code', 'array', 0); // "mode" can be "multi" or "single" $f_mode = Input::Get('f_mode', 'string', 'single', true); if ($f_mode == "multi") { $args = $_REQUEST; $argsStr = camp_implode_keys_and_values($args, "=", "&"); $backLink = "/$ADMIN/articles/multi_autopublish.php?".$argsStr; } else { $args = $_REQUEST; unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $backLink = "/$ADMIN/articles/autopublish.php?".$argsStr; } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } // Get all the articles. $articles = array(); $errorArticles = array(); foreach ($f_article_code as $code) { list($articleId, $languageId) = explode("_", $code); $tmpArticle = new Article($languageId, $articleId); if ($tmpArticle->getWorkflowStatus() != 'N') { $articles[] = $tmpArticle; } else { $errorArticles[] = $tmpArticle; } } $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } if ($f_publish_date == "") { camp_html_add_msg($translator->trans('You must fill in the $1 field.', array('$1' => ''.$translator->trans('Date').''))); } if ( ($f_publish_hour == "") || ($f_publish_minute == "") ) { camp_html_add_msg($translator->trans('You must fill in the $1 field.',array('$1' => ''.$translator->trans('Time').''))); } if ( ($f_publish_action != "P") && ($f_publish_action != "U") && ($f_front_page_action != "S") && ($f_front_page_action != "R") && ($f_section_page_action != "S") && ($f_section_page_action != "R") ) { camp_html_add_msg($translator->trans('You must select an action.')); } if ( (count($articles) == 0) && (count($errorArticles) > 0) ) { camp_html_add_msg($translator->trans("The article is new; it is not possible to schedule it for automatic publishing.", array(), 'articles')); } if (camp_html_has_msgs()) { camp_html_goto_page($backLink); } $publishTime = $f_publish_date . " " . $f_publish_hour . ":" . $f_publish_minute . ":00"; foreach ($articles as $tmpArticle) { $articleEvents = ArticlePublish::GetArticleEvents($tmpArticle->getArticleNumber(), $f_language_selected, TRUE); foreach($articleEvents as $event) { if ( $event->getActionTime() == $publishTime ) { if ( $f_publish_action != $event->getPublishAction() ) { ?> create(); $articlePublishObj->setArticleNumber($tmpArticle->getArticleNumber()); $articlePublishObj->setLanguageId($tmpArticle->getLanguageId()); $articlePublishObj->setActionTime($publishTime); if ($f_publish_action == "P" || $f_publish_action == "U") { $articlePublishObj->setPublishAction($f_publish_action); } if ($f_front_page_action == "S" || $f_front_page_action == "R") { $articlePublishObj->setFrontPageAction($f_front_page_action); } if ($f_section_page_action == "S" || $f_section_page_action == "R") { $articlePublishObj->setSectionPageAction($f_section_page_action); } Log::ArticleMessage($tmpArticle, $translator->trans('Scheduled action added', array(), 'articles'), $g_user->getUserId(), 37); } if ($f_mode == "multi") { $args = $_REQUEST; unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); camp_html_add_msg($translator->trans("Scheduled action added.", array(), 'articles'), "ok"); camp_html_goto_page("/$ADMIN/articles/index.php?".$argsStr); } else { ?> ================================================ FILE: newscoop/admin-files/articles/comments/add_comment_form.php ================================================ getService('translator'); // check permissions if (!$g_user->hasPermission('CommentEnable')) { return; } ?>

    trans('Post a Comment', array(), 'article_comments'); ?>

    • />
    ================================================ FILE: newscoop/admin-files/articles/comments/reply.php ================================================ getService('translator'); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_comment_id = Input::Get('f_comment_id'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } if ($g_user->hasPermission('EditorSpellcheckerEnabled')) { $spellcheck = 'spellcheck="true"'; } else { $spellcheck = 'spellcheck="false"'; } // Check that the article exists. $articleObj = new Article($f_language_id, $f_article_number); if (!$articleObj->exists()) { exit; } if (!$articleObj->commentsEnabled() || $articleObj->commentsLocked()) { camp_html_goto_page(camp_html_article_url($articleObj, $f_language_selected, "edit.php")); } $publicationObj = new Publication($articleObj->getPublicationId()); $issueObj = new Issue($articleObj->getPublicationId(), $f_language_id, $articleObj->getIssueNumber()); $sectionObj = new Section($articleObj->getPublicationId(), $articleObj->getIssueNumber(), $f_language_id, $articleObj->getSectionNumber()); $languageObj = new Language($articleObj->getLanguageId()); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj, 'Article'=>$articleObj); camp_html_content_top($translator->trans("Reply to comment", array(), 'article_comments'), $topArray); ?>
    /left_arrow.png" border="0" /> ">trans('Back to Edit Article'); ?>

    trans('From', array(), 'article_comments'); ?>: ${name} <${email}> (${ip}) trans('Date'); ?>: ${time_created} trans('Subject'); ?>: ${subject} trans('Comment'); ?>: ${message}

    trans('Reply to comment', array(), 'article_comments'); ?>
    trans('Subject'); ?>: >
    trans('Comment'); ?>:
    ================================================ FILE: newscoop/admin-files/articles/comments/show_comments.php ================================================ getService('translator'); // check permissions if (!$g_user->hasPermission('CommentEnable')) { return; } ?> 'language_id', 'f_article_number' => 'article_id', 'f_language_selected' => 'language_selected_id', ); foreach ($hiddens as $name) { if (!isset($$name)) { $$name = ''; } echo '', "\n"; } /** @todo Replace this basic template with a doT template from jquery*/ ?>

    trans('No comments posted.', array(), 'article_comments'); ?>

    ================================================ FILE: newscoop/admin-files/articles/context_box/popup.php ================================================ getService('translator'); ?> <?php echo $translator->trans("Edit Related articles", array(), 'articles'); ?>

    trans('Related Articles', array(), 'articles'); ?>

    trans('Related Articles', array(), 'articles'); ?>

    ================================================ FILE: newscoop/admin-files/articles/do_add.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('AddArticle')) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } // Get input $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); // For choosing the article location. $f_destination_publication_id = Input::Get('f_destination_publication_id', 'int', 0, true); $f_destination_issue_number = Input::Get('f_destination_issue_number', 'int', 0, true); $f_destination_section_number = Input::Get('f_destination_section_number', 'int', 0, true); $f_article_name = trim(Input::Get('f_article_name', 'string', '')); $f_article_type = trim(Input::Get('f_article_type', 'string', '')); $f_article_language = trim(Input::Get('f_article_language', 'int', 0)); $f_language_id = ($f_language_id > 0) ? $f_language_id : $f_article_language; $linkArgs = '?f_article_name=' . urlencode($f_article_name) . '&f_article_type=' . urlencode($f_article_type) . "&f_article_language=$f_article_language"; if ($f_publication_id != 0) { $linkArgs .= "&f_publication_id=$f_publication_id" . "&f_issue_number=$f_issue_number" . "&f_section_number=$f_section_number" . "&f_language_id=$f_language_id"; $backLink = "/$ADMIN/articles/add.php" . $linkArgs; } else { $backLink = "/$ADMIN/articles/add_move.php" . $linkArgs; } // Check input if (empty($f_article_name)) { camp_html_add_msg($translator->trans('You must fill in the $1 field.', array('$1' => ''.$translator->trans('Name').''))); } if (empty($f_article_type)) { camp_html_add_msg($translator->trans('You must select an article type.')); } if (empty($f_article_language)) { camp_html_add_msg($translator->trans('You must select a language.')); } if (camp_html_has_msgs()) { camp_html_goto_page($backLink); } $articleType = new ArticleType($f_article_type); if (!$articleType->exists()) { camp_html_display_error($translator->trans('Invalid type: $1', array('$1' => $f_article_type), 'articles')); } $publication_id = ($f_destination_publication_id > 0) ? $f_destination_publication_id : $f_publication_id; $issue_number = ($f_destination_issue_number > 0) ? $f_destination_issue_number : $f_issue_number; $section_number = ($f_destination_section_number > 0) ? $f_destination_section_number : $f_section_number; if ($publication_id > 0) { $publicationObj = new Publication($publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } if ($issue_number > 0) { $issueObj = new Issue($publication_id, $f_article_language, $issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } if ($section_number > 0) { $sectionObj = new Section($publication_id, $issue_number, $f_article_language, $section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } } } } // Create article $articleObj = new Article($f_article_language); $conflictingArticles = Article::GetByName($f_article_name, $publication_id, $issue_number, $section_number, null, true); if (count($conflictingArticles) > 0) { $conflictingArticle = array_pop($conflictingArticles); $conflictingArticleLink = camp_html_article_url($conflictingArticle, $conflictingArticle->getLanguageId(), 'edit.php'); camp_html_add_msg($translator->trans("You cannot have two articles in the same section with the same name. The article name you specified is already in use by the article $1.", array('$1' => "".$conflictingArticle->getName().""), 'articles')); camp_html_goto_page($backLink); } else { $articleObj->create($f_article_type, $f_article_name, $publication_id, $issue_number, $section_number); } if ($articleObj->exists()) { $em = $this->_helper->service('em'); $currentUser = $this->_helper->service('user')->getCurrentUser(); $author = $currentUser->getAuthorId(); $articleObj->setCreatorId($g_user->getUserId()); if (empty($author)) { $authorObj = new Author($g_user->getRealName()); if (!$authorObj->exists()) { $authorData = Author::ReadName($g_user->getRealName()); $authorData['email'] = $g_user->getEmail(); $authorObj->create($authorData); } else { $authorUser = $em->getRepository('Newscoop\Entity\Author') ->findOneById($authorObj->getId()); $currentUser->setAuthor($authorUser); $em->flush(); } } else { $authorObj = new Author($author); } if ($authorObj->exists()) { $articleObj->setAuthor($authorObj); } $articleObj->setIsPublic(true); if ($publication_id > 0) { $commentDefault = $publicationObj->commentsArticleDefaultEnabled(); $articleObj->setCommentsEnabled($commentDefault); } camp_html_add_msg($translator->trans("Article created.", array(), 'articles'), "ok"); $editorService = \Zend_Registry::get('container')->getService('newscoop.editor'); $articleLink = $editorService->getLink($articleObj); camp_html_goto_page($articleLink, false); ArticleIndex::RunIndexer(3, 10, true); exit(); } else { camp_html_display_error($translator->trans("Could not create article.", array(), 'articles')); } ================================================ FILE: newscoop/admin-files/articles/do_article_action.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_action = Input::Get('f_action', 'string', null, true); $f_action_workflow = Input::Get('f_action_workflow', 'string', null, true); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } if (is_null($f_action) && is_null($f_action_workflow)) { camp_html_display_error($translator->trans('No action specified', array(), 'articles')); exit; } $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { $BackLink = "/$ADMIN/articles/index.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_language_id=$f_language_id&f_section_number=$f_section_number"; camp_html_display_error($translator->trans('Article does not exist.'), $BackLink); exit; } switch ($f_action) { case "unlock": // If the user does not have permission to change the article // or they didnt create the article, give them the boot. if (!$articleObj->userCanModify($g_user)) { camp_html_add_msg($translator->trans("You do not have the right to change this article. You may only edit your own articles and once submitted an article can only be changed by authorized users.", array(), 'articles')); } else { camp_html_add_msg($translator->trans("Article unlocked.", array(), 'articles'), "ok"); $articleObj->setIsLocked(false); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.unlock', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $articleObj ))); } camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, "edit.php", "", "&f_unlock=true")); exit; case "delete": if (!$g_user->hasPermission('DeleteArticle')) { camp_html_add_msg($translator->trans("You do not have the right to delete articles.", array(), 'articles')); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, "edit.php")); } else { $creatorId = $articleObj->getCreatorId(); $articleObj->delete(); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('user.set_points', new \Newscoop\EventDispatcher\Events\GenericEvent(null, array('user' => $creatorId))); if ($f_publication_id > 0) { $url = "/$ADMIN/articles/index.php" ."?f_publication_id=$f_publication_id" ."&f_issue_number=$f_issue_number" ."&f_section_number=$f_section_number" ."&f_language_id=$f_language_id"; } else { $url = "/$ADMIN/home.php"; } camp_html_add_msg($translator->trans("Article deleted.", array(), 'articles'), "ok"); camp_html_goto_page($url); } exit; case "translate": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= "&f_article_code=".$f_article_number."_".$f_language_selected; camp_html_goto_page("/$ADMIN/articles/translate.php?".$argsStr, false); ArticleIndex::RunIndexer(3, 10, true); exit; case "copy": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= "&f_article_code[]=".$f_article_number."_".$f_language_selected; $argsStr .= "&f_mode=single&f_action=duplicate"; camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr, false); ArticleIndex::RunIndexer(3, 10, true); exit; case "move": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= "&f_article_code[]=".$f_article_number."_".$f_language_selected; $argsStr .= "&f_mode=single&f_action=move"; camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr, false); ArticleIndex::RunIndexer(3, 10, true); exit; } if (!is_null($f_action_workflow)) { $f_action_workflow = strtoupper($f_action_workflow); if (in_array($f_action_workflow, array('Y', 'M', 'S', 'N'))) { $access = false; // A publisher can change the status in any way he sees fit. // Someone who can change an article can submit/unsubmit articles. // A user who owns the article may submit it. if ($g_user->hasPermission('Publish') || ($g_user->hasPermission('ChangeArticle') && ($f_action_workflow != 'Y')) || ($articleObj->userCanModify($g_user) && ($f_action_workflow == 'S') )) { $access = true; } // If the article is set to New, remove all the autopublish events if ( $f_action_workflow == 'N') { $articleEvents = ArticlePublish::GetArticleEvents($f_article_number, $f_language_selected, TRUE); foreach($articleEvents as $event) { $eventId = $event->getArticlePublishId(); $articlePublishObj = new ArticlePublish($eventId); if ($articlePublishObj->exists()) { $articlePublishObj->delete(); } } } if (!$access) { camp_html_add_msg($translator->trans("You do not have the right to change this article status. Once submitted an article can only be changed by authorized users.", array(), 'articles')); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, "edit.php")); } // If the article is not yet categorized, force it to be before publication. if (($f_action_workflow == "Y" || $f_action_workflow == 'M') && (($articleObj->getPublicationId() == 0) || ($articleObj->getIssueNumber() == 0) || ($articleObj->getSectionNumber() == 0))) { $args = $_REQUEST; $argsStr = camp_implode_keys_and_values($_REQUEST, "=", "&"); $argsStr .= "&f_article_code[]=".$f_article_number."_".$f_language_selected; $argsStr .= "&f_mode=single&f_action=publish"; camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr); } else if (($f_action_workflow == "S") && (($articleObj->getPublicationId() == 0) || ($articleObj->getIssueNumber() == 0) || ($articleObj->getSectionNumber() == 0))) { $args = $_REQUEST; $argsStr = camp_implode_keys_and_values($_REQUEST, "=", "&"); $argsStr .= "&f_article_code[]=".$f_article_number."_".$f_language_selected; $argsStr .= "&f_mode=single&f_action=submit"; camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr); } $articleObj->setWorkflowStatus($f_action_workflow); // Make sure that the time stamp is updated. $articleObj->setProperty('time_updated', 'NOW()', true, true); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article'); camp_html_add_msg($translator->trans("Article status set to $1", array('$1' => $articleObj->getWorkflowDisplayString()), 'articles'), "ok"); } $url = camp_html_article_url($articleObj, $f_language_id, "edit.php"); camp_html_goto_page($url); } ?> ================================================ FILE: newscoop/admin-files/articles/do_article_list_action.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Get input $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_codes = Input::Get('f_article_code', 'array', array(), true); $f_article_list_action = Input::Get('f_article_list_action'); $f_total_articles = Input::Get('f_total_articles', 'int', 0); $offsetVarName = "f_article_offset_".$f_publication_id."_".$f_issue_number."_".$f_language_id."_".$f_section_number; $f_article_offset = camp_session_get($offsetVarName, 0); $ArticlesPerPage = 15; if (sizeof($f_article_codes) == 0) { camp_html_add_msg('You must select at least one article to perform an action.'); camp_html_goto_page("/$ADMIN/articles/?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number" ."&f_section_number=$f_section_number&f_language_id=$f_language_id"); exit(0); } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } if ($f_article_offset < 0) { $f_article_offset = 0; } // Validate permissions switch ($f_article_list_action) { case "delete": if (!$g_user->hasPermission('DeleteArticle')) { camp_html_display_error($translator->trans("You do not have the right to delete articles.", array(), 'articles')); exit; } break; case "publish": if (!$g_user->hasPermission('Publish')) { $errorStr = $translator->trans("You do not have the right to change this article status. Once submitted an article can only be changed by authorized users.", array(), 'articles'); camp_html_display_error($errorStr, $BackLink); exit; } break; case "copy": case "copy_interactive": if (!$g_user->hasPermission('AddArticle')) { $errorStr = $translator->trans("You do not have the right to add articles."); camp_html_display_error($errorStr, $BackLink); exit; } break; } $articleCodes = array(); $groupedArticleCodes = array(); foreach ($f_article_codes as $code) { list($articleId, $languageId) = explode("_", $code); $articleCodes[] = array("article_id" => $articleId, "language_id" => $languageId); $groupedArticleCodes[$articleId][$languageId] = $languageId; } switch ($f_article_list_action) { case "workflow_new": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); // A publisher can change the status in any way he sees fit. // Someone who can change an article can submit/unsubmit articles. if ($g_user->hasPermission('Publish') || ($g_user->hasPermission('ChangeArticle') && ($articleObj->getWorkflowStatus() == 'S'))) { $articleObj->setWorkflowStatus('N'); $articleObj->setProperty('time_updated', 'NOW()', true, true); } } camp_html_add_msg($translator->trans("Article status set to $1", array('$1' => $translator->trans("New")), 'articles'), "ok"); break; case "workflow_submit": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); // A user who owns the article may submit it. if ($g_user->hasPermission("Publish") || $articleObj->userCanModify($g_user)) { $articleObj->setWorkflowStatus('S'); $articleObj->setProperty('time_updated', 'NOW()', true, true); } } camp_html_add_msg($translator->trans("Article status set to $1", array('$1' => $translator->trans("Submitted")), 'articles'), "ok"); break; case "workflow_publish": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); $articleObj->setWorkflowStatus('Y'); $articleObj->setProperty('time_updated', 'NOW()', true, true); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.publish', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $articleObj ))); } camp_html_add_msg($translator->trans("Article status set to $1", array('$1' => $translator->trans("Published")), 'articles'), "ok"); break; case "delete": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); $articleObj->delete(); } if ($f_article_offset > 15 && (count($articleCodes) + $f_article_offset) == $f_total_articles) { $f_article_offset -= $ArticlesPerPage; } camp_html_add_msg($translator->trans("Article(s) deleted.", array(), 'articles'), "ok"); break; case "toggle_front_page": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { $articleObj->setOnFrontPage(!$articleObj->onFrontPage()); } } camp_html_add_msg($translator->trans("$1 toggled.", array('$1' => """.$translator->trans("On Front Page")."""), 'articles'), "ok"); break; case "toggle_section_page": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { $articleObj->setOnSectionPage(!$articleObj->onSectionPage()); } } camp_html_add_msg($translator->trans("$1 toggled.", array('$1' => """.$translator->trans("On Section Page")."""), 'articles'), "ok"); break; case "toggle_comments": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { $articleObj->setCommentsEnabled(!$articleObj->commentsEnabled()); } } camp_html_add_msg($translator->trans("$1 toggled.", array('$1' => """.$translator->trans("Comments")."""), 'articles'), "ok"); break; case "copy": foreach ($groupedArticleCodes as $articleNumber => $languageArray) { $languageId = camp_array_peek($languageArray); $articleObj = new Article($languageId, $articleNumber); $articleObj->copy($articleObj->getPublicationId(), $articleObj->getIssueNumber(), $articleObj->getSectionNumber(), $g_user->getUserId(), $languageArray); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.duplicate', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $articleObj, 'orginal_article_number' => $articleNumber ))); camp_html_add_msg($translator->trans("Article(s) duplicated.", array(), 'articles'), "ok"); } camp_session_set($offsetVarName, 0); break; case "copy_interactive": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= "&f_mode=multi&f_action=duplicate"; foreach ($_REQUEST["f_article_code"] as $code) { $argsStr .= "&f_article_code[]=$code"; } camp_session_set($offsetVarName, 0); camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr); case "move": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= "&f_mode=multi&f_action=move"; foreach ($_REQUEST["f_article_code"] as $code) { $argsStr .= "&f_article_code[]=$code"; } camp_session_set($offsetVarName, 0); camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr); case "unlock": foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { $articleObj->setIsLocked(false); } } camp_html_add_msg($translator->trans("Article(s) unlocked.", array(), 'articles'), "ok"); break; case "context_box_update": camp_html_add_msg($translator->trans("Context Box updated", array(), 'articles'), "ok"); break; case "schedule_publish": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); foreach ($_REQUEST["f_article_code"] as $code) { $argsStr .= "&f_article_code[]=$code"; } camp_html_goto_page("/$ADMIN/articles/multi_autopublish.php?".$argsStr); case "translate": $args = $_REQUEST; unset($args[SecurityToken::SECURITY_TOKEN]); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); foreach ($_REQUEST["f_article_code"] as $code) { $argsStr .= "&f_article_code=$code"; break; } camp_html_goto_page("/$ADMIN/articles/translate.php?".$argsStr); } $backUrl = "/$ADMIN/articles/index.php?f_publication_id=$f_publication_id" . "&f_issue_number=$f_issue_number&f_section_number=$f_section_number" . "&f_language_id=$f_language_id&f_language_selected=$f_language_selected" . "&$offsetVarName=$f_article_offset"; camp_html_goto_page($backUrl); ?> ================================================ FILE: newscoop/admin-files/articles/do_edit.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_article_author = Input::Get('f_article_author', 'array', array(), true); $f_article_author_type = Input::Get('f_article_author_type', 'array', array(), true); $f_on_front_page = Input::Get('f_on_front_page', 'string', '', true); $f_on_section_page = Input::Get('f_on_section_page', 'string', '', true); $f_is_public = Input::Get('f_is_public', 'string', '', true); $f_keywords = Input::Get('f_keywords'); $f_article_title = Input::Get('f_article_title'); $f_message = Input::Get('f_message', 'string', '', true); $f_creation_date = Input::Get('f_creation_date'); $f_publish_date = Input::Get('f_publish_date'); $f_comment_status = Input::Get('f_comment_status', 'string', '', true); if (isset($_REQUEST['save_and_close'])) { $f_save_button = 'save_and_close'; $BackLink = "/$ADMIN/articles/index.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_language_id=$f_language_id&f_section_number=$f_section_number"; } else { $f_save_button = 'save'; $BackLink = "/$ADMIN/"; } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } // Fetch article $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('No such article.', array(), 'articles'), $BackLink); exit; } $articleTypeObj = $articleObj->getArticleData(); $dbColumns = $articleTypeObj->getUserDefinedColumns(false, true); $articleFields = array(); foreach ($dbColumns as $dbColumn) { if ($dbColumn->getType() == ArticleTypeField::TYPE_BODY) { $dbColumnParam = $dbColumn->getName() . '_' . $f_article_number; } else { $dbColumnParam = $dbColumn->getName(); } if (isset($_REQUEST[$dbColumnParam])) { if($dbColumn->getType() == ArticleTypeField::TYPE_TEXT && $dbColumn->getMaxSize()!=0 && $dbColumn->getMaxSize()!='') { $articleFields[$dbColumn->getName()] = substr(trim(Input::Get($dbColumnParam)), 0, $dbColumn->getMaxSize()); } else $articleFields[$dbColumn->getName()] = trim(Input::Get($dbColumnParam)); } else { $articleFields[$dbColumn->getName()] = null; } } if (!empty($f_message)) { camp_html_add_msg($f_message, "ok"); } if (!$articleObj->userCanModify($g_user)) { camp_html_add_msg($translator->trans("You do not have the right to change this article. You may only edit your own articles and once submitted an article can only be changed by authorized users.", array(), 'articles')); camp_html_goto_page($BackLink); exit; } // Only users with a lock on the article can change it. if ($articleObj->isLocked() && ($g_user->getUserId() != $articleObj->getLockedByUser())) { $diffSeconds = time() - strtotime($articleObj->getLockTime()); $hours = floor($diffSeconds/3600); $diffSeconds -= $hours * 3600; $minutes = floor($diffSeconds/60); $lockUser = new User($articleObj->getLockedByUser()); camp_html_add_msg($translator->trans('Could not save the article. It has been locked by $1 $2 hours and $3 minutes ago.', array('$1' => $lockUser->getRealName(), '$2' => $hours, '$3' => $minutes), 'articles')); camp_html_goto_page($BackLink); exit; } // Update the article author if (!empty($f_article_author)) { ArticleAuthor::OnArticleLanguageDelete($articleObj->getArticleNumber(), $articleObj->getLanguageId()); $i = 0; foreach ($f_article_author as $author) { $authorObj = new Author($author); if (!$authorObj->exists() && strlen(trim($author)) > 0) { $authorData = Author::ReadName($author); $authorObj->create($authorData); } // Sets the author type selected $author_type = $f_article_author_type[$i]; $authorObj->setType($author_type); // Links the author to the article $articleAuthorObj = new ArticleAuthor($articleObj->getArticleNumber(), $articleObj->getLanguageId(), $authorObj->getId(), $author_type); if (!$articleAuthorObj->exists()) { $articleAuthorObj->create(); } $i++; } } // Update the article. $articleObj->setOnFrontPage(!empty($f_on_front_page)); $articleObj->setOnSectionPage(!empty($f_on_section_page)); $articleObj->setIsPublic(!empty($f_is_public)); $articleObj->setKeywords($f_keywords); $articleObj->setTitle($f_article_title); $articleObj->setIsIndexed(false); if (!empty($f_comment_status)) { if ($f_comment_status == "enabled" || $f_comment_status == "locked") { $commentsEnabled = true; } else { $commentsEnabled = false; } // If status has changed, then you need to show/hide all the comments // as appropriate. if ($articleObj->commentsEnabled() != $commentsEnabled) { $articleObj->setCommentsEnabled($commentsEnabled); global $controller; $repository = $controller->getHelper('entity')->getRepository('Newscoop\Entity\Comment'); $repository->setArticleStatus($f_article_number, $f_language_selected, $commentsEnabled?STATUS_APPROVED:STATUS_HIDDEN); $repository->flush(); } $articleObj->setCommentsLocked($f_comment_status == "locked"); } // Make sure that the time stamp is updated. $articleObj->setProperty('time_updated', 'NOW()', true, true); // Verify creation date is in the correct format. // If not, dont change it. if (preg_match("/\d{4}-\d{2}-\d{2}/", $f_creation_date)) { $articleObj->setCreationDate($f_creation_date); } // Verify publish date is in the correct format. // If not, dont change it. if (preg_match("/\d{4}-\d{2}-\d{2}/", $f_publish_date)) { $articleObj->setPublishDate($f_publish_date); } foreach ($articleFields as $dbColumnName => $text) { $articleTypeObj->setProperty($dbColumnName, $text); } $articleObj->setIsLocked(false); Log::ArticleMessage($articleObj, $translator->trans('Content edited', array(), 'articles'), $g_user->getUserId(), 37); if ($f_save_button == "save") { camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'edit.php'), false); } elseif ($f_save_button == "save_and_close") { if ($f_publication_id > 0) { camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'index.php'), false); } else { camp_html_goto_page("/$ADMIN/", false); } } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article'); ArticleIndex::RunIndexer(3, 10, true); ?> ================================================ FILE: newscoop/admin-files/articles/do_position.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('Publish')) { camp_html_display_error($translator->trans("You do not have the right to change this article. You may only edit your own articles and once submitted an article can only be changed by authorized users." , array(), 'articles')); exit; } // Get input $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_language = Input::Get('f_article_language', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_move = Input::Get('f_move', 'string', 'up_rel'); $f_position = Input::Get('f_position', 'int', 1, true); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } $articleObj = new Article($f_article_language, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article does not exist.')); exit; } switch ($f_move) { case 'up_rel': $articleObj->positionRelative('up', 1); break; case 'down_rel': $articleObj->positionRelative('down', 1); break; case 'abs': $articleObj->positionAbsolute($f_position); break; default: ; } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article'); $url = "/$ADMIN/articles/index.php" ."?f_publication_id=".$articleObj->getPublicationId() ."&f_issue_number=".$articleObj->getIssueNumber() ."&f_section_number=".$articleObj->getSectionNumber() ."&f_article_number=".$articleObj->getArticleNumber() ."&f_language_selected=$f_language_selected" ."&f_language_id=".$f_language_id; camp_html_add_msg($translator->trans("Article order changed.", array(), 'articles'), "ok"); camp_html_goto_page($url); ?> ================================================ FILE: newscoop/admin-files/articles/do_translate.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission("AddArticle")) { $errorStr = $translator->trans('You do not have the right to change this article. You may only edit your own articles and once submitted an article can only be changed by authorized users.', array(), 'articles'); camp_html_display_error($errorStr); exit; } // Optional input. $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); // Required input. $f_article_code = Input::Get('f_article_code', 'string', 0); $f_translation_title = trim(Input::Get('f_translation_title')); $f_translation_language = Input::Get('f_translation_language'); list($articleNumber, $languageId) = explode("_", $f_article_code); $backLink = "/$ADMIN/articles/translate.php?f_language_id=$f_language_id" . "&f_publication_id=$f_publication_id&f_issue_number=$f_issue_number" . "&f_section_number=$f_section_number&f_article_code=$f_article_code" . "&f_translation_title=$f_translation_title&f_translation_language=$f_translation_language"; if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } $articleObj = new Article($languageId, $articleNumber); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article does not exist.')); exit; } $translationLanguageObj = new Language($f_translation_language); if (!$translationLanguageObj->exists()) { camp_html_display_error($translator->trans('Language does not exist.')); exit; } $translationArticle = new Article($f_translation_language, $articleNumber); if ($translationArticle->exists()) { camp_html_add_msg($translator->trans("The article has already been translated into $1.", array('$1' => $translationLanguageObj->getNativeName()), 'articles')); camp_html_goto_page($backLink); } $f_publication_id = $articleObj->getPublicationId(); // Only create the translated issue and section if the article has been categorized. if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.'), $backLink); exit; } $f_issue_number = $articleObj->getIssueNumber(); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('No such issue.'), $backLink); exit; } $translationIssueObj = $issueObj->copy(null, $issueObj->getIssueNumber(), $f_translation_language); if (!$translationIssueObj) { $translationIssueObj = new Issue($f_publication_id, $f_translation_language, $f_issue_number); } if (!$translationIssueObj->exists()) { if (!$g_user->hasPermission("ManageIssue")) { camp_html_add_msg($translator->trans('An issue must be created for the selected language but you do not have the right to create an issue.', array(), 'articles')); camp_html_goto_page($backLink); } foreach ($issueObj->getData() as $field=>$fieldValue) { if ($field != 'IdLanguage') { $translationIssueObj->setProperty($field, $fieldValue, false); } } $f_issue_name = Input::Get('f_issue_name', 'string', ''); $f_issue_urlname = Input::Get('f_issue_urlname', 'string', $issueObj->getUrlName()); if ($f_issue_name != '') { $translationIssueObj->setName($f_issue_name); } if ($f_issue_urlname == "") { camp_html_add_msg($translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('New issue URL name', array(), 'articles').'"'))); camp_html_goto_page($backLink); } if (!camp_is_valid_url_name($f_issue_urlname)) { camp_html_add_msg($translator->trans('The $1 field may only contain letters, digits and underscore (_) character.', array('$1' => '"' . $translator->trans('New issue URL name', array(), 'articles') . '"'))); camp_html_goto_page($backLink); } $translationIssueObj->create($f_issue_urlname); if (!$translationIssueObj->exists()) { camp_html_add_msg($translator->trans('Unable to create the issue for translation $1.', array('$1' => $translationLanguageObj->getName()), 'articles')); camp_html_goto_page($backLink); } } else { $f_issue_name = Input::Get('f_issue_name', 'string', $translationIssueObj->getName()); $f_issue_urlname = Input::Get('f_issue_urlname', 'string', $translationIssueObj->getUrlName()); $translationIssueObj->update(array('Name' => $f_issue_name, 'ShortName' => $f_issue_urlname)); } $f_section_number = $articleObj->getSectionNumber(); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('No such section.', array(), 'articles'), $backLink); exit; } $translationSectionObj = new Section($f_publication_id, $f_issue_number, $f_translation_language, $f_section_number); if (!$translationSectionObj->exists()) { if (!$g_user->hasPermission("ManageSection")) { camp_html_add_msg($translator->trans('A section must be created for the selected language but you do not have the right to create a section.', array(), 'articles')); camp_html_goto_page($backLink); } foreach ($sectionObj->getData() as $field=>$fieldValue) { if (!in_array($field, array('IdLanguage', 'id'))) { $translationSectionObj->setProperty($field, $fieldValue, false); } } $f_section_name = Input::Get('f_section_name', 'string', $sectionObj->getName()); $f_section_urlname = Input::Get('f_section_urlname', 'string', $sectionObj->getUrlName()); if ($f_section_urlname == "") { camp_html_add_msg($translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('New section URL name', array(), 'articles').'"'))); camp_html_goto_page($backLink); } if (!camp_is_valid_url_name($f_section_urlname)) { camp_html_add_msg($translator->trans('The $1 field may only contain letters, digits and underscore (_) character.', array('$1' => '"' . $translator->trans('New section URL name', array(), 'articles') . '"'))); camp_html_goto_page($backLink); } $translationSectionObj->create($f_section_name, $f_section_urlname); if (!$translationSectionObj->exists()) { camp_html_add_msg($translator->trans('Unable to create the section for translation $1.', array('$1' => $translationLanguageObj->getName()), 'articles')); camp_html_goto_page($backLink); } } else { $f_section_name = Input::Get('f_section_name', 'string', $translationSectionObj->getName()); $f_section_urlname = Input::Get('f_section_urlname', 'string', $translationSectionObj->getUrlName()); $translationSectionObj->update(array('Name' => $f_section_name, 'ShortName' => $f_section_urlname)); } } if($articleObj->translationTitleExists($f_translation_title, $f_translation_language)) { camp_html_add_msg($translator->trans("There already is an article with the same name. Please change the name and try again.", array(), 'articles'), "ok"); camp_html_goto_page($backLink); exit(); } $articleCopy = $articleObj->createTranslation($f_translation_language, $g_user->getUserId(), $f_translation_title); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.translate', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $articleCopy ))); camp_html_add_msg($translator->trans("Article translation created.", array(), 'articles'), "ok"); ArticleIndex::RunIndexer(3, 10, true); camp_html_goto_page(camp_html_article_url($articleCopy, $f_translation_language, 'edit.php'), true); ================================================ FILE: newscoop/admin-files/articles/do_unlock.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } $articleObj = new Article($f_language_selected, $f_article_number); // If the user does not have permission to change the article // or they didnt create the article, give them the boot. if (!$articleObj->userCanModify($g_user)) { camp_html_display_error($translator->trans("You do not have the right to change this article. You may only edit your own articles and once submitted an article can only be changed by authorized users.", array(), 'articles')); exit; } $articleObj->setIsLocked(false); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('article'); camp_html_add_msg($translator->trans("Article unlocked.", array(), 'articles'), "ok"); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, "edit.php", "", "&Unlock=true")); ?> ================================================ FILE: newscoop/admin-files/articles/duplicate.php ================================================ getService('translator'); // Optional input, for articles that are inside of sections. $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_code = Input::Get('f_article_code', 'array', array(), true); $f_destination_publication_id = Input::Get('f_destination_publication_id', 'int', 0, true); $f_destination_issue_number_language = explode('_', Input::Get('f_destination_issue_number', 'str', '0_'.$f_language_id, true)); $f_destination_issue_number = $f_destination_issue_number_language[0]; $f_destination_issue_language_id = $f_destination_issue_number_language[1]; $f_destination_section_number = Input::Get('f_destination_section_number', 'int', 0, true); // $f_mode can be "single" or "multi". This governs // the behavior of where the user goes after they perform the action. $f_mode = Input::Get('f_mode', 'string', 'single', true); // $f_action can be "duplicate", "move", or "publish". $f_action = Input::Get('f_action'); // // Check permissions // if ($f_action == "duplicate") { if (!$g_user->hasPermission("AddArticle")) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } } elseif ($f_action == "move") { if (!$g_user->hasPermission("MoveArticle")) { camp_html_display_error($translator->trans("You do not have the right to move articles.", array(), 'articles')); exit; } } elseif ($f_action == "publish") { if (!$g_user->hasPermission("Publish")) { camp_html_display_error($translator->trans("You do not have the right to publish articles.", array(), 'articles')); exit; } } // Article names can change from page request to page request. // We create $articleNames, a 2-dimensional array of article names indexed by article ID, language ID. // // The user can choose whether to perform an action on articles from page request to page request. // We create $doAction, a 2-dimensional array of boolean values indexed by article ID, language ID. $articleNames = array(); $doAction = array(); foreach ($_REQUEST as $key => $value) { if (!strncmp($key, "f_article_name_", strlen("f_article_name_"))) { $tmpCodeStr = str_replace("f_article_name_", "", $key); list($articleId, $languageId) = explode("_", $tmpCodeStr); $articleNames[$articleId][$languageId] = Input::Get($key, 'string', '', true); } if (!strncmp($key, "f_do_copy_", strlen("f_do_copy_"))) { $tmpCodeStr = str_replace("f_do_copy_", "", $key); list($articleId, $languageId) = explode("_", $tmpCodeStr); $doAction[$articleId][$languageId] = Input::Get($key, 'string', '', true); } } // $articles array: // The articles that were initially selected to perform the move or duplicate upon. $articles = array(); $firstArticle = null; foreach ($f_article_code as $code) { list($articleNumber, $languageId) = explode("_", $code); $tmpArticle = new Article($languageId, $articleNumber); if (is_null($firstArticle)) { $firstArticle = $tmpArticle; } $articles[$articleNumber][$languageId] = $tmpArticle; // Initialize the article names on initial page request. // Initialize the $doAction array on initial page request. if (!isset($articleNames[$articleNumber][$languageId])) { $articleNames[$articleNumber][$languageId] = $tmpArticle->getTitle(); $doAction[$articleNumber][$languageId] = $languageId; } } // Fill in article names for translations. // The user is automatically given the choice to perform actions on translations // when they get to this screen. foreach ($articles as $articleNumber => $languageArray) { $tmpArticle = camp_array_peek($languageArray); $translations = $tmpArticle->getTranslations(); foreach ($translations as $article) { $articleNumber = $article->getArticleNumber(); $articleLanguage = $article->getLanguageId(); if (!isset($articleNames[$articleNumber][$articleLanguage])) { $articleNames[$articleNumber][$articleLanguage] = $article->getTitle(); } if (!isset($articles[$articleNumber][$articleLanguage])) { $articles[$articleNumber][$articleLanguage] = $article; } } } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } if ($f_issue_number > 0) { $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } if ($f_section_number > 0) { $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } } } } // Get all the publications $allPublications = Publication::GetPublications(); // Automatically select the publication if there is only one. if (count($allPublications) == 1) { $tmpPublication = camp_array_peek($allPublications); $f_destination_publication_id = $tmpPublication->getPublicationId(); } // Get the most recent issues. $allIssues = array(); if ($f_destination_publication_id > 0) { $allIssues = Issue::GetIssues($f_destination_publication_id, null, null, null, null, false, array("LIMIT" => 300, "ORDER BY" => array("Number" => "DESC")/*, 'GROUP BY' => 'Number'*/), true); // Automatically select the issue if there is only one. if (count($allIssues) == 1) { $tmpIssue = camp_array_peek($allIssues); $f_destination_issue_number = $tmpIssue->getIssueNumber(); } } // Get all the sections. $allSections = array(); if ($f_destination_issue_number > 0) { $destIssue = new Issue($f_destination_publication_id, $f_destination_issue_language_id); $allSections = Section::GetSections($f_destination_publication_id, $f_destination_issue_number, $f_destination_issue_language_id, null, null, array("ORDER BY" => array("Number" => "DESC"), 'GROUP BY' => 'Number'), true); // Automatically select the section if there is only one. if (count($allSections) == 1) { $tmpSection = camp_array_peek($allSections); $f_destination_section_number = $tmpSection->getSectionNumber(); } else { $tmpSection = new Section($f_destination_publication_id, $f_destination_issue_number, $firstArticle->getLanguageId(), $f_destination_section_number); if (!$tmpSection->exists()) { $f_destination_section_number = 0; } } } // Special case: // You cannot copy the articles if there is no cooresponding translated issue/section // in the destination issue. For example, you cannot copy a french article to an // issue that has ONLY an english translation. $issueLanguages = array(); if ($f_destination_issue_number > 0) { $issueTranslations = Issue::GetIssues($f_destination_publication_id, null, $f_destination_issue_number, null, null, false, null, true); $issueLanguages = DbObjectArray::GetColumn($issueTranslations, "IdLanguage"); } // $actionDenied is TRUE if any articles cannot be moved/duped. $actionDenied = false; foreach ($articles as $articleNumber => $languageArray) { foreach ($languageArray as $languageId => $article) { $tmpActionDenied = (count($issueLanguages) > 0) && !in_array($languageId, $issueLanguages); $actionDenied |= $tmpActionDenied; // Uncheck any articles that cannot be moved/duped. if ($tmpActionDenied) { unset($doAction[$articleNumber][$languageId]); if (isset($doAction[$articleNumber]) && count($doAction[$articleNumber]) == 0) { unset($doAction[$articleNumber]); } } } } // // This section is executed when the user finally hits the action button. // if (isset($_REQUEST["action_button"])) { $srcArticleIndexUrl = "/$ADMIN/articles/" ."?f_publication_id=$f_publication_id" ."&f_issue_number=$f_issue_number" ."&f_section_number=$f_section_number" ."&f_language_id=$f_language_id"; $destArticleIndexUrl = "/$ADMIN/articles/" ."?f_publication_id=$f_destination_publication_id" ."&f_issue_number=$f_destination_issue_number" ."&f_section_number=$f_destination_section_number" ."&f_language_id=$f_language_id"; // If no actions were selected, dont do anything. if (($f_action != "move") && (count($doAction) == 0) ) { camp_html_goto_page($srcArticleIndexUrl); } if (!empty($f_action) && !SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if ($f_action == "duplicate") { global $controller; $em = Zend_Registry::get('container')->getService('em'); $ArticleDatetimeRepository = $controller->getHelper('entity')->getRepository('Newscoop\Entity\ArticleDatetime'); foreach ($doAction as $articleNumber => $languageArray) { $events = $ArticleDatetimeRepository->findBy(array('articleId' => $articleNumber)); $languageArray = array_keys($languageArray); $tmpLanguageId = camp_array_peek($languageArray); // Error checking if (!isset($articles[$articleNumber][$tmpLanguageId])) { continue; } // Grab the first article - it doesnt matter which one. $tmpArticle = $articles[$articleNumber][$tmpLanguageId]; // Copy all the translations requested. $newArticles = $tmpArticle->copy($f_destination_publication_id, $f_destination_issue_number, $f_destination_section_number, $g_user->getUserId(), $languageArray); // Set properties for each new copy. foreach ($newArticles as $newArticle) { // Set the name of the new copy $newArticle->setTitle($articleNames[$articleNumber][$newArticle->getLanguageId()]); // Set the default "comment enabled" status based // on the publication config settings. if ($f_destination_publication_id > 0) { $tmpPub = new Publication($f_destination_publication_id); $commentDefault = $tmpPub->commentsArticleDefaultEnabled(); $newArticle->setCommentsEnabled($commentDefault); } foreach ($events as $event) { //$repo->add($timeSet, $articleId, 'schedule'); $newEvent = $ArticleDatetimeRepository->getEmpty(); $newEvent->setArticleId($newArticle->getArticleNumber()); $newEvent->setArticleType($event->getArticleType()); $newEvent->setStartDate($event->getStartDate()); $newEvent->setStartTime($event->getStartTime()); $newEvent->setEndDate($event->getEndDate()); $newEvent->setEndTime($event->getEndTime()); $newEvent->setRecurring($event->getRecurring()); $newEvent->setFieldName($event->getFieldName()); $em->persist($newEvent); } $em->flush(); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.duplicate', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $newArticle, 'orginal_article_number' => $articleNumber ))); } } if ($f_mode == "single") { $tmpArticle = camp_array_peek($newArticles); $url = camp_html_article_url($tmpArticle, $tmpArticle->getLanguageId(), "edit.php"); } else { $url = $destArticleIndexUrl; } ArticleIndex::RunIndexer(3, 10, true); camp_html_add_msg($translator->trans("Article(s) duplicated.", array(), 'articles'), "ok"); camp_html_goto_page($url); } elseif ($f_action == "move") { // Move all the translations requested. $tmpArticles = array(); foreach ($articles as $articleNumber => $languageArray) { $tmpArticle = camp_array_peek($languageArray); $translations = $tmpArticle->getTranslations(); foreach ($translations as $tmpArticle2) { $articleNumber = $tmpArticle2->getArticleNumber(); $articleLanguage = $tmpArticle2->getLanguageId(); $tmpArticle2->move($f_destination_publication_id, $f_destination_issue_number, $f_destination_section_number); $tmpArticle2->setTitle($articleNames[$articleNumber][$articleLanguage]); $tmpArticles[] = $tmpArticle2; \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.move', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $tmpArticle, ))); } } $tmpArticle = camp_array_peek($tmpArticles); if ($f_mode == "single") { $url = camp_html_article_url($tmpArticle, $tmpArticle->getLanguageId(), "edit.php"); } else { $url = $destArticleIndexUrl; } ArticleIndex::RunIndexer(3, 10, true); camp_html_add_msg($translator->trans("Article moved.", array(), 'articles'), "ok"); camp_html_goto_page($url); } elseif ($f_action == "publish") { // Publish all the articles requested. $tmpArticles = array(); foreach ($doAction as $articleNumber => $languageArray) { foreach ($languageArray as $languageId => $action) { $tmpArticle = new Article($languageId, $articleNumber); $tmpArticle->setTitle($articleNames[$articleNumber][$languageId]); // Check if the name already exists in the destination section. $conflictingArticles = Article::GetByName($tmpArticle->getTitle(), $f_destination_publication_id, $f_destination_issue_number, $f_destination_section_number, null, true); if (count($conflictingArticles) > 0) { $conflictingArticle = array_pop($conflictingArticles); $conflictingArticleLink = camp_html_article_url($conflictingArticle, $conflictingArticle->getLanguageId(), "edit.php"); camp_html_add_msg($translator->trans("The article could not be published.", array(), 'articles')." ".$translator->trans("You cannot have two articles in the same section with the same name. The article name you specified is already in use by the article $1.", array( '$1' => "".$conflictingArticle->getName().""), 'articles')); $args = $_REQUEST; unset($args["action_button"]); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); foreach ($_REQUEST["f_article_code"] as $code) { $argsStr .= "&f_article_code[]=$code"; } $backLink = "/$ADMIN/articles/duplicate.php?$argsStr"; camp_html_goto_page($backLink); } else { $tmpArticle->move($f_destination_publication_id, $f_destination_issue_number, $f_destination_section_number); $tmpArticle->setWorkflowStatus('Y'); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.publish', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $tmpArticle, ))); $tmpArticles[] = $tmpArticle; } } } $tmpArticle = camp_array_peek($tmpArticles); if ($f_mode == "single") { $url = camp_html_article_url($tmpArticle, $tmpArticle->getLanguageId(), "edit.php"); } else { $url = $destArticleIndexUrl; } ArticleIndex::RunIndexer(3, 10, true); camp_html_goto_page($url); } elseif ($f_action == "submit") { // Submit all the articles requested. $tmpArticles = array(); foreach ($doAction as $articleNumber => $languageArray) { foreach ($languageArray as $languageId => $action) { $tmpArticle = new Article($languageId, $articleNumber); $tmpArticle->setTitle($articleNames[$articleNumber][$languageId]); // Check if the name already exists in the destination section. $conflictingArticles = Article::GetByName($tmpArticle->getTitle(), $f_destination_publication_id, $f_destination_issue_number, $f_destination_section_number, null, true); if (count($conflictingArticles) > 0) { $conflictingArticle = array_pop($conflictingArticles); $conflictingArticleLink = camp_html_article_url($conflictingArticle, $conflictingArticle->getLanguageId(), "edit.php"); camp_html_add_msg($translator->trans("The article could not be submitted.", array(), 'articles')." ".$translator->trans("You cannot have two articles in the same section with the same name. The article name you specified is already in use by the article '$1'.", array( '$1' => "".$conflictingArticle->getName().""), 'articles')); $args = $_REQUEST; unset($args["action_button"]); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); foreach ($_REQUEST["f_article_code"] as $code) { $argsStr .= "&f_article_code[]=$code"; } $backLink = "/$ADMIN/articles/duplicate.php?$argsStr"; camp_html_goto_page($backLink); } else { $tmpArticle->move($f_destination_publication_id, $f_destination_issue_number, $f_destination_section_number); $tmpArticle->setWorkflowStatus('S'); \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('article.submit', new \Newscoop\EventDispatcher\Events\GenericEvent($this, array( 'article' => $tmpArticle, ))); $tmpArticles[] = $tmpArticle; } } } $tmpArticle = camp_array_peek($tmpArticles); if ($f_mode == "single") { $url = camp_html_article_url($tmpArticle, $tmpArticle->getLanguageId(), "edit.php"); } else { $url = $destArticleIndexUrl; } ArticleIndex::RunIndexer(3, 10, true); camp_html_goto_page($url); } } // END perform the action $title = ""; if (count($doAction) > 1) { if ($f_action == "duplicate") { $title = $translator->trans("Duplicate articles", array(), 'articles'); } elseif ($f_action == "move") { $title = $translator->trans("Move articles", array(), 'articles'); } elseif ($f_action == "publish") { $title = $translator->trans("Publish articles", array(), 'articles'); } elseif ($f_action == "submit") { $title = $translator->trans("Submit articles", array(), 'articles'); } } else { if ($f_action == "duplicate") { $title = $translator->trans("Duplicate article", array(), 'articles'); } elseif ($f_action == "move") { $title = $translator->trans("Move article", array(), 'articles'); } elseif ($f_action == "publish") { $title = $translator->trans("Publish article", array(), 'articles'); } elseif ($f_action == "submit") { $title = $translator->trans("Submit article", array(), 'articles'); } } if ($f_publication_id > 0) { $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); if (count($articles) > 1) { $crumbs = array($translator->trans("Articles") => "/$ADMIN/articles/index.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_language_id=$f_language_id&f_language_selected=$f_language_selected"); camp_html_content_top($title, $topArray, true, false, $crumbs); } elseif ($f_issue_number > 0 && $f_section_number > 0) { $topArray['Article'] = camp_array_peek(camp_array_peek($articles)); camp_html_content_top($title, $topArray); } else { $crumbs = array(); $crumbs[] = array($translator->trans("Pending articles", array(), 'articles'), "/$ADMIN/pending_articles"); $crumbs[] = array($title, ""); echo camp_html_breadcrumbs($crumbs); } } else { $crumbs = array(); $crumbs[] = array($translator->trans("Actions"), ""); $crumbs[] = array($title, ""); echo camp_html_breadcrumbs($crumbs); } ?>
    /left_arrow.png" BORDER="0"> ">trans("Back to Edit Article"); ?>

    :
    0) { ?> getLanguageId()); ?>">
    $article) { $bad = (count($issueLanguages) > 0) && !in_array($languageId, $issueLanguages); $articleNumber = $article->getArticleNumber(); ?>
    trans("Duplicate?", array(), 'articles'); } elseif ($f_action == "publish") { echo $translator->trans("Publish?", array(), 'articles'); } ?> trans("Name"); ?> trans("Language"); ?> trans("Type"); ?>
    style="border-left: 3px solid #AF2041; background-color: #FFD4E4;"> " value="" > 0) { ?>class="translation_indent" style="background-color: #FFD4E4;"> " SIZE="50" MAXLENGTH="256" VALUE="" class="input_text"> style="background-color: #FFD4E4"> getLanguageName())); ?> style="background-color: #FFD4E4; border-right: 3px solid #AF2041;"> getTranslateType())); ?>
    trans("You cannot $1 the articles marked in red because the destination issue has not been translated into the appropriate language.", array('$1' => ($f_action == "move") ? $translator->trans("move") : $translator->trans("duplicate")), 'articles'); ?>

    trans("to section", array(), 'articles'); ?>:

    trans("Select destination"); ?>
    trans('Publication'); ?>: 1) { ?> getName())); ?>
    trans('Issue'); ?>: 0) && (count($allIssues) > 1)) { ?> 0) && (count($allIssues) == 1)) { $tmpIssue = camp_array_peek($allIssues); p(htmlspecialchars($tmpIssue->getName())); ?>
    trans('Section'); ?>: 0) && (count($allSections) > 1)) { ?> 0) && (count($allSections) == 1)) { $tmpSection = camp_array_peek($allSections); p(htmlspecialchars($tmpSection->getName())); ?>
    0) && ($f_language_id == $f_destination_issue_language_id)) { echo $translator->trans("The destination section is the same as the source section.", array(), 'articles'); echo "
    \n"; } ?>
    >

    ================================================ FILE: newscoop/admin-files/articles/edit.php ================================================ getService('translator'); // These are optional, depending on whether you are in a section // or whether editing an article that doesnt have a location. $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_unlock = Input::Get('f_unlock', 'string', false, true); // $f_edit_mode can be "view" or "edit" $f_edit_mode = Input::Get('f_edit_mode', 'string', 'edit', true); // Whether to show comments at the bottom of the article // (you may not want to show them to speed up your loading time) // Selected language of the article $f_language_selected = (int) camp_session_get('f_language_selected', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } // Fetch article $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('No such article.', array(), 'articles')); exit; } // detect if blogger can edit $userIsBlogger = false; $blogService = \Zend_Registry::get('container')->getService('blog'); if ($blogService->isBlogger($g_user)) { $userIsBlogger = true; $userSection = $blogService->getSection($g_user); if (empty($userSection) || $userSection->getSectionId() != $articleObj->getSection()->getSectionId()) { camp_html_display_error($translator->trans("You are not allowed to edit article.", array(), 'articles')); exit; } } $controller->view->headTitle($articleObj->getName().' - '.$translator->trans('Edit article', array(), 'article_files').' - Newscoop Admin', 'SET'); $articleData = $articleObj->getArticleData(); // Get article type fields. $dbColumns = $articleData->getUserDefinedColumns(); $articleType = new ArticleType($articleObj->getType()); $articleImages = ArticleImage::GetImagesByArticleNumber($f_article_number); $lockUserObj = new User($articleObj->getLockedByUser()); $articleCreator = new User($articleObj->getCreatorId()); $articleEvents = ArticlePublish::GetArticleEvents($f_article_number, $f_language_selected, TRUE); $em = \Zend_Registry::get('container')->getService('em'); $articleTopics = $em->getRepository("Newscoop\Entity\ArticleTopic") ->getArticleTopicsIds($f_article_number) ->getResult(); $articleFiles = ArticleAttachment::GetAttachmentsByArticleNumber($f_article_number, $f_language_selected); $articleLanguages = $articleObj->getLanguages(); // Create displayable "last modified" time. $lastModified = strtotime($articleObj->getLastModified()); $today = getdate(); $savedOn = getdate($lastModified); $savedToday = true; if ($today['year'] != $savedOn['year'] || $today['mon'] != $savedOn['mon'] || $today['mday'] != $savedOn['mday']) { $savedToday = FALSE; } $sectionObj = null; $showComments = FALSE; $showCommentControls = FALSE; if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); if ($publicationObj->exists()) { $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if ($issueObj->exists()) { $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if ($sectionObj->exists()) { $languageObj = new Language($articleObj->getLanguageId()); } else { $sectionObj = null; } } else { $issueObj = null; } } else { $publicationObj = null; } $showCommentControls = ($publicationObj->commentsEnabled() && $articleType->commentsEnabled()); $showComments = $showCommentControls && $articleObj->commentsEnabled(); } if ($showComments) { // $comments = array(); /** * @todoget comments */ } // Automatically switch to "view" mode if user doesnt have permissions if (!$articleObj->userCanModify($g_user)) { $f_edit_mode = 'view'; } // // Automatic unlocking // $locked = TRUE; // If the article has not been touched in 24 hours $timeDiff = camp_time_diff_str($articleObj->getLockTime()); if ($timeDiff['days'] > 0) { $articleObj->setIsLocked(FALSE); $locked = FALSE; } elseif (($articleObj->getLockedByUser() != 0) && !$lockUserObj->exists()) { // If the user who locked the article doesnt exist anymore, unlock the article $articleObj->setIsLocked(FALSE); $locked = FALSE; } // // Automatic locking // // If the article has not been unlocked and is not locked by a user. if ($f_unlock === FALSE) { if (!$articleObj->isLocked()) { // Lock the article $articleObj->setIsLocked(TRUE, $g_user->getUserId()); } } else { $f_edit_mode = 'view'; } // Automatically unlock the article if the user goes into VIEW mode $lockedByCurrentUser = ($articleObj->getLockedByUser() == $g_user->getUserId()); if (($f_edit_mode == 'view') && $lockedByCurrentUser) { $articleObj->setIsLocked(FALSE); } // If the article is locked by the current user, OK to edit. if ($lockedByCurrentUser) { $locked = FALSE; } // // Begin Display of page // include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); $inEditMode = ($f_edit_mode == 'edit'); $inViewMode = ($f_edit_mode == 'view'); $publishRights = $g_user->hasPermission('Publish'); if ($g_user->hasPermission('EditorSpellcheckerEnabled')) { $spellcheck = 'spellcheck="true"'; } else { $spellcheck = 'spellcheck="false"'; } // Generate the breadcrumb $title = ''; if ($f_publication_id > 0 && $f_issue_number && $f_section_number) { $topArray = array( 'Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj, 'Article' => $articleObj ); camp_html_content_top($title, $topArray); } else { $crumbs = array(); $crumbs[] = array($translator->trans('Pending Articles', array(), 'articles'), "/$ADMIN/pending_articles/index.php"); $crumbs[] = array($title, ''); echo camp_html_breadcrumbs($crumbs); } function parseTextBody($text, $articleNumber) { $translator = \Zend_Registry::get('container')->getService('translator'); // Subheads $text = preg_replace("//i", "", $text); $text = preg_replace("//i", "", $text); // Internal Links with targets $text = preg_replace("//i", '', $text); // Internal Links without targets $text = preg_replace("//i", '', $text); // External Links (old style 2.1) with targets $text = preg_replace("//i", '', $text); // External Links (old style 2.1) without targets $text = preg_replace("//i", '', $text); // End link $text = preg_replace("//i", "", $text); // Images preg_match_all("/ $snippetPattern = '<\-\-\sSnippet\s([\d]+)\s\-\->'; $text = preg_replace("/$snippetPattern/i", '

    '.$translator->trans('Snippet', array(), 'articles').' $1
    ', $text); if (isset($imageMatches[1][0])) { if (isset($titles) && sizeof($titles) > 0) { for ($x = 0; $x < sizeof($titles[0]); $x++) { $text = preg_replace("/\s*".preg_replace('~\/~', '\/', preg_quote($titles[0][$x]))."/", ' title="'.htmlspecialchars($titles[1][$x], ENT_QUOTES, 'UTF-8').'"', $text); } } $formattingErrors = FALSE; foreach ($imageMatches[1] as $templateId) { // Get the image URL $articleImage = new ArticleImage($articleNumber, NULL, $templateId); if (!$articleImage->exists()) { ArticleImage::RemoveImageTagsFromArticleText($articleNumber, $templateId); $formattingErrors = TRUE; continue; } $image = new Image($articleImage->getImageId()); $imageUrl = $image->getImageUrl(); unset($fakeTemplateId); if (isset($ratios) && sizeof($ratios) > 0) { $n = 0; foreach ($ratios[3] as $ratio) { if ($ratios[1][$n++] == $templateId) { $fakeTemplateId = $templateId.'_'.$ratio; } } } if (!isset($fakeTemplateId)) { $fakeTemplateId = $templateId; } $text = preg_replace("/window.location.reload();'); } } return $text; } $hasMultiDates = false; $multiDatesFields = array(); include_once 'edit_html.php'; // Display tinymce loading code if required $hasArticleBodyField = FALSE; foreach ($dbColumns as $dbColumn) { if ($dbColumn->getType() == ArticleTypeField::TYPE_BODY) { $hasArticleBodyField = TRUE; } } if ($inEditMode && $hasArticleBodyField) { $languageSelectedObj = new Language($f_language_selected); $editorLanguage = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : $languageSelectedObj->getCode(); editor_load_tinymce($dbColumns, $g_user, $f_article_number, $editorLanguage); } foreach (array('fCustomFields', 'fCustomSwitches', 'fCustomTextares') as $var) { if (!isset($$var)) { $$var = array(); } } $jsArrayFieldsStr = ''; for ($i = 0; $i < sizeof($fCustomFields); $i++) { $jsArrayFieldsStr .= "'" . addslashes($fCustomFields[$i]) . "'"; if ($i + 1 < sizeof($fCustomFields)) { $jsArrayFieldsStr .= ','; } } $jsArraySwitchesStr = ''; for ($i = 0; $i < sizeof($fCustomSwitches); $i++) { $jsArraySwitchesStr .= "'" . addslashes($fCustomSwitches[$i]) . "'"; if ($i + 1 < sizeof($fCustomSwitches)) { $jsArraySwitchesStr .= ','; } } $jsArrayTextareasStr = ''; if( isset($fCustomTextareas) ) for ($i = 0; $i < sizeof($fCustomTextareas); $i++) { $jsArrayTextareasStr .= "'" . addslashes($fCustomTextareas[$i]) . "'"; if ($i + 1 < sizeof($fCustomTextareas)) { $jsArrayTextareasStr .= ','; } } include 'edit_javascript.php'; ================================================ FILE: newscoop/admin-files/articles/edit_comments_box.php ================================================ getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('system_preferences_service'); ?>
    trans("Comments", array(), 'articles'); ?>
    UseDBReplication == 'Y') { if ($connectedToOnlineServer) { ?> trans("Online Server: On", array(), 'articles'); } elseif (isset($connectedToOnlineServer) &&$connectedToOnlineServer == false) { ?> trans("Online Server: Off", array(), 'articles'); } ?>
    trans("Total:", array(), 'articles'); ?>
    ">trans("Hide Comments", array(), 'articles'); ?> ">trans("Show Comments", array(), 'articles'); ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_context_box.php ================================================ getService('translator'); ?>
    hasPermission('ChangeArticle')) : ?> "> trans('Edit'); ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_html.php ================================================ getService('translator'); // If the article is locked say so to the user if ($articleObj->userCanModify($g_user) && $locked && !$inViewMode) { ?>

    trans('Article is locked', array(), 'articles'); ?>

    • getLockTime()); if ($timeDiff['hours'] > 0) { echo $translator->trans('The article has been locked by $1 ($2) $3 hour(s) and $4 minute(s) ago.', array( '$1' => ''.htmlspecialchars($lockUserObj->getRealName()), '$2' => htmlspecialchars($lockUserObj->getUserName()).'', '$3' => $timeDiff['hours'], '$4' => $timeDiff['minutes']), 'articles'); } else { echo $translator->trans('The article has been locked by $1 ($2) $3 minute(s) ago.', array( '$1' => ''.htmlspecialchars($lockUserObj->getRealName()), '$2' => htmlspecialchars($lockUserObj->getUserName()).'', '$3' => $timeDiff['minutes']), 'articles'); } ?>
    • '" /> '" />
    userCanModify($g_user)) { $switchModeUrl = camp_html_article_url($articleObj, $f_language_id, 'edit.php') . '&f_edit_mode=' . ( ($inEditMode) ? 'view' : 'edit'); } // Display either the "Go to live article" or "Preview" button // depending on article status $doPreviewLink = ''; if (isset($publicationObj) && $articleObj->isPublished()) { if ($publicationObj->getUrlTypeId() == 2) { $previewLinkURL = ShortURL::GetURL($publicationObj->getPublicationId(), $articleObj->getLanguageId(), null, null, $articleObj->getArticleNumber()); $doPreviewLink = 'live'; $seoFields = $publicationObj->getSeo(); $articleEndLink = $articleObj->getSEOURLEnd($seoFields, $articleObj->getLanguageId()); if (strlen($articleEndLink) > 0) { $previewLinkURL .= $articleEndLink; } if (!is_string($previewLinkURL) && PEAR::isError($previewLinkURL)) { $doLiveLink = ''; } } } else { if (isset($publicationObj) && (0 < $f_publication_id) && (0 < $f_issue_number) && (0 < $f_section_number)) { $doPreviewLink = 'preview'; $previewLinkURL = "/$ADMIN/articles/preview.php?f_publication_id=$f_publication_id" . "&f_issue_number=$f_issue_number&f_section_number=$f_section_number" . "&f_article_number=$f_article_number&f_language_id=$f_language_id&f_language_selected=$f_language_selected"; } } ?>
    /> getTitle()), 80, '
    '); ?>
    getTitle()), 80, '
    '); ?>
    disabled style="opacity: 0.3" />
    userCanModify($g_user)) {?> disabled="disabled" class="default-button disabled" onclick="location.href='';" class="default-button" /> disabled="disabled" class="default-button disabled" onclick="location.href='';" class="default-button" /> trans('Go to live article', array(), 'articles'); ?> trans('Preview'); ?>
     
    ', "\n"; } ?>
    • isPublished()) { ?>
      trans('Published'); ?>: getPublishDate()); ?>
      trans('Created', array(), 'articles'); ?>: getCreationDate()); ?>
      getType() == ArticleTypeField::TYPE_TEXT) { ?>
    • getName(); ?> getMaxSize()!=0 && $dbColumn->getMaxSize()!=''): ?> maxlength="getMaxSize(); ?>" class="input_text countableft" class="input_text" /> getProperty($dbColumn->getName())); } ?>
    • getType() == ArticleTypeField::TYPE_LONGTEXT) { ?>
    • getName(); ?> getProperty($dbColumn->getName())); } ?>
    • getType() == ArticleTypeField::TYPE_DATE) { // Date fields if ($articleData->getProperty($dbColumn->getName()) == '0000-00-00') { $articleData->setProperty($dbColumn->getName(), 'CURDATE()', TRUE, TRUE); } ?>
    • getName(); ?> getProperty($dbColumn->getName())); ?>  trans('YYYY-MM-DD'); ?>
    • getType() == ArticleTypeField::TYPE_BODY) { // Multiline text fields // Transform Campsite-specific tags into editor-friendly tags. $unparsedText = $articleData->getProperty($dbColumn->getName()); $text = parseTextBody($unparsedText, $f_article_number); $editorSize = str_replace('editor_size=', '', $dbColumn->m_data['field_type_param']); if (!is_numeric($editorSize)) { require_once($GLOBALS['g_campsiteDir'].'/classes/ArticleTypeField.php'); $editorSize = ArticleTypeField::BODY_ROWS_MEDIUM; } ?>
    • getName() . '_' . $f_article_number; $fCustomTextareas[] = $textAreaId; ?>
    • getType() == ArticleTypeField::TYPE_TOPIC) { $articleTypeField = new ArticleTypeField($articleObj->getType(), substr($dbColumn->getName(), 1)); $rootTopicId = $articleTypeField->getTopicTypeRootElement(); $em = \Zend_Registry::get('container')->getService('em'); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $topicService = \Zend_Registry::get('container')->getService('newscoop_newscoop.topic_service'); $cacheKey = $cacheService->getCacheKey(array('topics_editor_article_type', $rootTopicId), 'topic'); $repository = $em->getRepository('Newscoop\NewscoopBundle\Entity\Topic'); if ($cacheService->contains($cacheKey)) { $subtopics = $cacheService->fetch($cacheKey); } else { $topic = $repository->getTopicByIdOrName($rootTopicId, camp_session_get('TOL_Language', 'en'))->getOneOrNullResult(); if ($topic && count($topic->getChildren()) > 0) { $subtopics = $topic->getChildren(); } $cacheService->save($cacheKey, $subtopics); } $articleTopicId = $articleData->getProperty($dbColumn->getName()); ?>
    • trans('No subtopics available', array(), 'articles'); ?> getType() == ArticleTypeField::TYPE_NUMERIC) { ?>
    • name="getName(); ?>" id="getName(); ?>" value="getProperty($dbColumn->getName())); ?>" disabled />
    • getType() == ArticleTypeField::TYPE_COMPLEX_DATE ) { $hasMultiDates = true; $multiDatesFields[] = $dbColumn->getPrintName(); } } ?>
    • commentsEnabled() && !$articleObj->commentsLocked()) { ?> checked /> commentsEnabled()) { ?> checked /> commentsEnabled() && $articleObj->commentsLocked()) { ?> checked />
    hasPermission('CommentEnable')) { ?> hasPermission('CommentEnable')) { ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_html_authors.php ================================================ getService('translator'); function drawCombo($id, $pos) { $combo = ' '; return $combo; } function drawComboContent($id = 0) { $combo = ''; $types = AuthorType::GetAuthorTypes(); foreach ($types as $xtype) { $combo .= ''; } return $combo; } ?> getArticleNumber(), $articleObj->getLanguageId()); if ($inEditMode) { ?>
    • getAuthorType())) ? ($author->getAuthorType()->getName()) : ''; ?>: getName()); ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_info_box.php ================================================ getService('translator'); ?>
    trans('Reads'); ?>
    isPublished()) { $requestObject = new RequestObject($articleObj->getProperty('object_id')); echo $requestObject->exists() ? $requestObject->getRequestCount() : '0'; } else { echo $translator->trans('N/A'); } ?>
    trans('Type'); ?>
    getDisplayName()); ?>
    trans('Number'); ?>
    getArticleNumber()); ?>
    trans('Created by'); ?>
    getRealName()) { p(htmlspecialchars(sprintf('%s %s', $articleCreator->getRealName(), $articleCreator->getLastName()))); echo ' ('.$articleCreator->getUserName().')'; } else { echo $translator->trans('N/A'); } ?>
    trans('Webcode', array(), 'articles'); ?>
    getWebcode(); ?>
    trans('Rating', array(), 'articles'); ?>
    getRating(); ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_javascript.php ================================================ getService('translator'); ?> ================================================ FILE: newscoop/admin-files/articles/edit_locations_box.php ================================================ getService('translator'); $locations = array(); $map_name = ''; $map_name_title = ''; $map = $articleObj->getMap(); if (is_object($map) && $map->exists()) { $locations = $map->getLocations(); $map_name = $map->getName(); if (0 < strlen($map_name)) { $map_name_title = $map_name; $map_name_title = str_replace("&", '&', $map_name_title); $map_name_title = str_replace("<", '<', $map_name_title); $map_name_title = str_replace(">", '>', $map_name_title); $map_name_title = str_replace("\\", '\', $map_name_title); $map_name_title = str_replace("'", ''', $map_name_title); $map_name_title = " title='$map_name_title'"; } $map_name_max_len = 20; if ($map_name_max_len < strlen($map_name)) { $map_name = mb_substr($map_name, 0, $map_name_max_len, 'UTF-8') . "..."; } $map_name = str_replace("&", '&', $map_name); $map_name = str_replace("<", '<', $map_name); $map_name = str_replace(">", '>', $map_name); } $detachMapUrl = "/$ADMIN/articles/locations/do_unlink.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_article_number=$f_article_number&f_language_selected=$f_language_selected&f_language_id=$f_language_id&".SecurityToken::URLParameter(); $map_language_used = $f_language_selected; if (0 == $map_language_used) { $map_language_used = $f_language_id; } $map_article_spec = '' . $f_article_number . '_' . $map_language_used; ?>
    hasPermission('ChangeArticle')); if ($map->exists()) { ?> <?php echo $translator->trans('Edit'); ?>trans('Edit'); ?> '); return false;" style="margin-bottom:8px;">trans('Remove'); ?> trans('Preview'); ?> <?php echo $translator->trans('Preview'); ?> trans('Preview'); ?> trans('Add'); ?> exists()) { ?>

    >

    exists() && !empty($locations)) { ?>
      getContent($language_usage); $poi_name = $content->getName(); $poi_name_max_len = 40; if ($poi_name_max_len < strlen($poi_name)) { $poi_name = mb_substr($poi_name, 0, $poi_name_max_len, 'UTF-8') . "..."; } $poi_name = str_replace("&", '&', $poi_name); $poi_name = str_replace("<", '<', $poi_name); $poi_name = str_replace(">", '>', $poi_name); if ($location->isEnabled($language_usage)) { echo '
    • ' . $poi_name . '
    • '; } else { echo '
    • ' . $poi_name . '
    • '; } } ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_main_box.php ================================================ getService('translator'); // set language url $languageUrl = implode('&', array( "edit.php?f_publication_id=$f_publication_id", "f_issue_number=$f_issue_number", "f_section_number=$f_section_number", "f_article_number=$f_article_number", "f_language_id={{language}}", "f_language_selected={{language}}", )); ?>
    1) { ?> '.htmlspecialchars($articleLanguage->getNativeName()).''; } ?> hasPermission('Publish')) { ?> userCanModify($g_user) && ($articleObj->getWorkflowStatus() != 'Y')) { ?> getWorkflowStatus()) { case 'Y': echo $translator->trans('Status') . ': ' . $translator->trans('Published'); break; case 'M': echo $translator->trans('Status') . ': ' . $translator->trans('Publish with issue'); break; case 'S': echo $translator->trans('Status') . ': ' . $translator->trans('Submitted'); break; case 'N': echo $translator->trans('Status') . ': ' . $translator->trans('New'); break; } } ?>
    getWorkflowStatus() != 'N' ) { require_once('edit_schedule_box.php'); } ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_media_box.php ================================================ getService('translator'); ?>
    hasPermission('AttachImageToArticle')) { ?> trans('Attach'); ?> _helper->service('image.rendition')->hasRenditions()) { ?> trans('Place images', array(), 'articles'); ?> 0) { ?> trans('Edit metadata', array(), 'articles'); ?>
      getImage(); $imageEditUrl = \Zend_Registry::get('container')->get('router')->generate('newscoop_newscoop_article_images_edit', array( 'language' => $f_language_id, 'articleNumber' => $f_article_number, 'imageId' => $image->getImageId() )); $detachUrl = "/$ADMIN/articles/images/do_unlink.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_article_number=$f_article_number&f_image_id=".$image->getImageId()."&f_language_selected=$f_language_selected&f_language_id=$f_language_id&f_image_template_id=".$articleImage->getTemplateId().'&'.SecurityToken::URLParameter(); $imageSize = @getimagesize($image->getImageStorageLocation()) ? : array(0, 0); ?>
    • get('image'); $preferenceService = \Zend_Registry::get('container')->get('preferences'); $localImage = $imageService->find($image->getImageId()); ?>
      view->escape($imageService->getCaption($localImage, $f_article_number, $f_language_selected)); ?>
      getTemplateId(); ?> getStatus() == 'approved' ? $translator->trans('Approved', array(), 'articles') : $translator->trans('Unapproved', array(), 'articles'); ?>
      MediaRichTextCaptions == 'Y') { echo $imageService->getCaption($localImage, $f_article_number, $f_language_selected); } else { echo $this->view->escape($imageService->getCaption($localImage, $f_article_number, $f_language_selected)); } ?>MediaRichTextCaptions == 'N') { echo '
      '; } ?> hasPermission('AttachImageToArticle')) { ?> 'image_caption'), 'articles'); ?>'.replace('image_caption', $('#image-getImageId(); ?>-caption').text()));">
    view->partial('slideshow-box.phtml', array( 'articleNumber' => $articleObj->getArticleNumber(), 'slideshows' => $this->_helper->service('package')->findByArticle($articleObj->getArticleNumber()), )); ?>
    hasPermission('AddFile')) { ?> ">trans('Attach'); ?>
      getAttachmentId()."&f_language_id=$f_language_id&f_language_selected=$f_language_selected"; $deleteUrl = "/$ADMIN/articles/files/do_del.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_article_number=$f_article_number&f_attachment_id=".$file->getAttachmentId()."&f_language_selected=$f_language_selected&f_language_id=$f_language_id&".SecurityToken::URLParameter(); $downloadUrl = $file->getAttachmentUrl()."?g_download=1"; $previewUrl = null; if (strstr($file->getMimeType(), "image/") && (strstr($_SERVER['HTTP_ACCEPT'], $file->getMimeType()) || (strstr($_SERVER['HTTP_ACCEPT'], "*/*")))) { $previewUrl = $Campsite['SUBDIR']."/attachment/".basename($file->getStorageLocation())."?g_show_in_browser=1"; } ?>
    • getFileName(), "25", "
      ", true); ?>
      getFileName(), "25", "
      ", true); ?> getLanguageId() ? htmlspecialchars($file->getDescription($f_language_selected)) : htmlspecialchars($file->getDescription($f_language_selected)) , ', ', camp_format_bytes($file->getSizeInBytes()); ?> trans('Download', array(), 'articles'); ?> hasPermission('DeleteFile')) { ?> camp_javascriptspecialchars($file->getFileName())), 'articles'); ?>');">
    ================================================ FILE: newscoop/admin-files/articles/edit_multidate_box.php ================================================ getService('translator'); if (empty($userIsBlogger)) { ?>
    hasPermission('ChangeArticle')) : ?> "> trans('Edit'); ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_playlist.php ================================================ getService('translator'); $router = \Zend_Registry::get('container')->getService('router'); if (empty($userIsBlogger)) : ?>
    getService('em') ->getRepository('Newscoop\Entity\Playlist') ->getArticlePlaylists(Input::Get('f_article_number', 'int', 1), Input::Get('f_language_id', 'int', 1)); $playlistsData = array(); foreach ($playlists as $playlist) { $playlistsData[] = (object) array( 'name' => $playlist->getName(), 'id' => $playlist->getId(), ); } } catch (\Exception $e) { $playlistsData = array(); } ?>
    • view->escape($playlist->name); ?>
    getHelper('acl')->isAllowed('playlist', 'manage')) : ?> trans('Edit'); ?>
    ================================================ FILE: newscoop/admin-files/articles/edit_schedule_box.php ================================================ getService('translator'); ?>
    hasPermission('Publish')) { ?> ">trans('Add Event'); ?>
    0) { ?>
    • getActionTime())); ?>
        getPublishAction(); if (!empty($publishAction)) { echo '
      • '; if ($publishAction == 'P') { echo $translator->trans('Publish'); } if ($publishAction == 'U') { echo $translator->trans('Unpublish'); } echo '
      • '; } $frontPageAction = $event->getFrontPageAction(); if (!empty($frontPageAction)) { echo '
      • '; if ($frontPageAction == 'S') { echo $translator->trans('Show on front page'); } if ($frontPageAction == 'R') { echo $translator->trans('Remove from front page'); } echo '
      • '; } $sectionPageAction = $event->getSectionPageAction(); if (!empty($sectionPageAction)) { echo '
      • '; if ($sectionPageAction == 'S') { echo $translator->trans('Show on section page'); } if ($sectionPageAction == 'R') { echo $translator->trans('Remove from section page'); } echo '
      • '; } ?>
      hasPermission('Publish')) { ?> camp_javascriptspecialchars($event->getActionTime())), 'articles'); ?>');" class="corner-button">
    ================================================ FILE: newscoop/admin-files/articles/edit_switches_box.php ================================================ getService('translator'); if (empty($userIsBlogger)) { ?>
    • onFrontPage()) { ?> checked disabled />
    • onSectionPage()) { ?> checked disabled />
    • ratingEnabled()) { ?> checked disabled />
    • getType() == ArticleTypeField::TYPE_SWITCH) { $checked = $articleData->getFieldValue($dbColumn->getPrintName()) ? 'checked' : ''; ?>
    • disabled />
    ================================================ FILE: newscoop/admin-files/articles/edit_topics_box.php ================================================ getService('translator'); ?>
    hasPermission('ChangeArticle')) { ?>
    getService('em'); $router = \Zend_Registry::get('container')->getService('router'); $language = $em->getReference("Newscoop\Entity\Language", $f_language_id); ?>
    hasPermission('AttachTopicToArticle')) { ?> trans('Edit'); ?>
    0) { ?>
      getRepository("Newscoop\NewscoopBundle\Entity\Topic"); foreach ($articleTopics as $tmpArticleTopic) { $tmpArticleTopic = $tmpArticleTopic->getTopic(); $pathStr = $repo->getReadablePath($tmpArticleTopic, $language->getCode()); // Get the topic name for the 'detach topic' dialog box, below. $tempArray = array_values(explode(" / ", $pathStr)); $tmpTopicName = end($tempArray); ?>
    •   ')); ?> hasPermission('AttachTopicToArticle')) { ?> camp_javascriptspecialchars($tmpTopicName)), 'articles'); ?>">
    ================================================ FILE: newscoop/admin-files/articles/editor_load_countable.php ================================================ ================================================ FILE: newscoop/admin-files/articles/editor_load_tinymce.php ================================================ getType() == ArticleTypeField::TYPE_BODY) { if ($p_articleNumber > 0) { $editors[] = $dbColumn->getName().'_'.$p_articleNumber; } else { $editors[] = $dbColumn->getName(); } } } } else { if ($p_articleNumber > 0) { $editors[] = $p_dbColumns.'_'.$p_articleNumber; } else { $editors[] = $p_dbColumns; } } $textareas = implode(",", $editors); /** STEP 2 ******************************************************** * Now, what are the plugins you will be using in the editors * on this page. List all the plugins you will need, even if not * all the editors will use all the plugins. ******************************************************************/ $plugins = array(); if ($p_user->hasPermission('EditorCopyCutPaste')) { $plugins[] = 'paste'; } if ($p_user->hasPermission('EditorFindReplace')) { $plugins[] = 'searchreplace'; } if ($p_user->hasPermission('EditorEnlarge')) { $plugins[] = 'fullscreen'; } if ($p_user->hasPermission('EditorTable')) { $plugins[] = 'table'; } if ($p_user->hasPermission('EditorTable')) { $plugins[] = 'table'; $plugins[] = 'textbox'; } if ($p_user->hasPermission('EditorLink')) { $plugins[] = 'campsiteinternallink'; if ($p_objectType == 'article') { $plugins[] = 'campsiteattachment'; } } if ($p_user->hasPermission('EditorImage') && $p_objectType == 'article') { $plugins[] = 'campsiteimage'; $plugins[] = 'media'; } if ($p_user->hasPermission('EditorFontColor')) { $plugins[] = 'codehighlighting'; } if ($p_user->hasPermission('EditorTextDirection')) { $plugins[] = 'directionality'; } $plugins[] = 'iframe'; $plugins_list = implode(",", $plugins); $statusbar_location = "none"; if ($p_user->hasPermission('EditorStatusBar')) { $statusbar_location = "bottom"; } /** STEP 3 ******************************************************** * We create a default configuration to be used by all the editors. * If you wish to configure some of the editors differently this * will be done in step 4. ******************************************************************/ $toolbar1 = array(); if ($p_user->hasPermission('EditorBold')) { $toolbar1[] = "bold"; } if ($p_user->hasPermission('EditorItalic')) { $toolbar1[] = "italic"; } if ($p_user->hasPermission('EditorUnderline')) { $toolbar1[] = "underline"; } if ($p_user->hasPermission('EditorStrikethrough')) { $toolbar1[] = "strikethrough"; $toolbar1[] = "blockquote"; } if ($p_user->hasPermission('EditorTextAlignment')) { $toolbar1[] = "|"; $toolbar1[] = "justifyleft"; $toolbar1[] = "justifycenter"; $toolbar1[] = "justifyright"; $toolbar1[] = "justifyfull"; } if ($p_user->hasPermission('EditorIndent')) { $toolbar1[] = "|"; $toolbar1[] = "outdent"; $toolbar1[] = "indent"; } if ($p_user->hasPermission('EditorCopyCutPaste')) { $toolbar1[] = "|"; $toolbar1[] = "copy"; $toolbar1[] = "cut"; $toolbar1[] = "paste"; $toolbar1[] = "pastetext"; $toolbar1[] = "pasteword"; } if ($p_user->hasPermission('EditorUndoRedo')) { $toolbar1[] = "|"; $toolbar1[] = "undo"; $toolbar1[] = "redo"; } if ($p_user->hasPermission('EditorTextDirection')) { $toolbar1[] = "|"; $toolbar1[] = "ltr"; $toolbar1[] = "rtl"; } if ($p_user->hasPermission('EditorLink')) { $toolbar1[] = "|"; $toolbar1[] = "campsiteinternallink"; $toolbar1[] = "link"; $toolbar1[] = "anchor"; if ($p_objectType == 'article') { $toolbar1[] = "campsiteattachment"; } } if ($p_user->hasPermission('EditorSubhead')) { $toolbar1[] = "campsite-subhead"; } if ($p_user->hasPermission('EditorImage') && $p_objectType == 'article') { $toolbar1[] = "campsiteimage"; $toolbar1[] = "media"; } if ($p_user->hasPermission('EditorSourceView')) { $toolbar1[] = "code"; } if ($p_user->hasPermission('EditorEnlarge')) { $toolbar1[] = "fullscreen"; } if ($p_user->hasPermission('EditorHorizontalRule')) { $toolbar1[] = "hr"; } if ($p_user->hasPermission('EditorFontColor')) { $toolbar1[] = "forecolor"; $toolbar1[] = "backcolor"; $toolbar1[] = 'codehighlighting'; } if ($p_user->hasPermission('EditorSubscript')) { $toolbar1[] = "sub"; } if ($p_user->hasPermission('EditorSuperscript')) { $toolbar1[] = "sup"; } if ($p_user->hasPermission('EditorFindReplace')) { $toolbar1[] = "|"; $toolbar1[] = "search"; $toolbar1[] = "replace"; } $toolbar2 = array(); // Slice up the first toolbar if it is too long. if (count($toolbar1) > 34) { $toolbar2 = array_splice($toolbar1, 34); } if ($p_user->hasPermission('EditorCharacterMap')) { $toolbar2[] = "charmap"; } // This is to put the bulleted and numbered list controls // on the most appropriate line of the toolbar. if ($p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber') && count($toolbar1) < 19) { $toolbar1[] = "|"; $toolbar1[] = "bullist"; $toolbar1[] = "numlist"; } elseif ($p_user->hasPermission('EditorListBullet') && !$p_user->hasPermission('EditorListNumber') && count($toolbar1) < 34) { $toolbar1[] = "|"; $toolbar1[] = "bullist"; } elseif (!$p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber') && count($toolbar1) < 20) { $toolbar1[] = "|"; $toolbar1[] = "numlist"; } else { $hasSeparator = false; if ($p_user->hasPermission('EditorListBullet')) { $toolbar2[] = "|"; $toolbar2[] = "bullist"; $hasSeparator = true; } if ($p_user->hasPermission('EditorListNumber')) { if (!$hasSeparator) { $toolbar2[] = "|"; } $toolbar2[] = "numlist"; } } if ($p_user->hasPermission('EditorFontFace')) { $toolbar2[] = "|"; //$toolbar2[] = "styleselect"; $toolbar2[] = "formatselect"; //$toolbar2[] = "fontselect"; } if ($p_user->hasPermission('EditorFontSize')) { $toolbar2[] = "fontsizeselect"; } $toolbar3 = array(); if ($p_user->hasPermission('EditorTable')) { $toolbar3[] = "tablecontrols"; $toolbar3[] = 'textbox'; } $toolbar2[] = 'iframe'; $theme_buttons1 = (count($toolbar1) > 0) ? implode(',', $toolbar1) : ''; $theme_buttons2 = (count($toolbar2) > 0) ? implode(',', $toolbar2) : ''; $theme_buttons3 = (count($toolbar3) > 0) ? implode(',', $toolbar3) : ''; $localeFile = $Campsite['CAMPSITE_DIR'] . '/js/tinymce/langs/' . $p_editorLanguage . '.js'; if (!file_exists($localeFile)) { $p_editorLanguage = 'en'; } ?> ================================================ FILE: newscoop/admin-files/articles/empty.php ================================================ Parse errors:
    ================================================ FILE: newscoop/admin-files/articles/files/do_add.php ================================================ getService('translator'); $request = \Zend_Registry::get('container')->getService('request'); $params = $request->request->all(); $queryParams = $request->query->all(); /** * Set message * @param string $message * @return void */ function setMessage($message, $isError = FALSE) { if (empty($queryParams['archive'])) { // fancybox echo ''; exit; } if ($isError) { camp_html_display_error($message, null, true); exit; } camp_html_add_msg($message); } if (empty($params)) { setMessage($translator->trans('The file exceeds the allowed max file size.', array(), 'article_files'), TRUE); } if (!SecurityToken::isValid()) { setMessage(SecurityToken::GetToken(), TRUE); setMessage($translator->trans('Invalid security token!'), TRUE); } if (!$g_user->hasPermission('AddFile')) { setMessage($translator->trans('You do not have the right to add files.', array(), 'article_files'), TRUE); } // We set to unlimit the maximum time to execution whether // safe_mode is disabled. Upload is still under control of // max upload size. if (!ini_get('safe_mode')) { set_time_limit(0); } $inArchive = !empty($queryParams['archive']); if (!$inArchive) { $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { setMessage($translator->trans("Article does not exist."), TRUE); } } $f_description = Input::Get('f_description'); $f_language_specific = Input::Get('f_language_specific'); $f_content_disposition = Input::Get('f_content_disposition'); $BackLink = Input::Get('BackLink', 'string', null, true); if (isset($_FILES["f_file"])) { switch($_FILES["f_file"]['error']) { case 0: // UPLOAD_ERR_OK break; case 1: // UPLOAD_ERR_INI_SIZE case 2: // UPLOAD_ERR_FORM_SIZE setMessage($translator->trans("The file exceeds the allowed max file size.", array(), 'article_files'), TRUE); break; case 3: // UPLOAD_ERR_PARTIAL setMessage($translator->trans("The uploaded file was only partially uploaded. This is common when the maximum time to upload a file is low in contrast with the file size you are trying to input. The maximum input time is specified in 'php.ini'", array(), 'article_files'), TRUE); break; case 4: // UPLOAD_ERR_NO_FILE setMessage($translator->trans("You must select a file to upload.", array(), 'article_files'), TRUE); break; case 6: // UPLOAD_ERR_NO_TMP_DIR case 7: // UPLOAD_ERR_CANT_WRITE setMessage($translator->trans("There was a problem uploading the file.", array(), 'article_files'), TRUE); break; } } else { setMessage($translator->trans("The file exceeds the allowed max file size.", array(), 'article_files'), TRUE); } if (!Input::IsValid()) { setMessage($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), TRUE); } $container = \Zend_Registry::get('container'); $user = $container->get('security.context')->getToken()->getUser(); $em = $container->get('em'); if (!empty($_FILES['f_file'])) { $language = $em->getRepository('Newscoop\Entity\Language')->findOneById($f_language_selected); $attachmentService = $container->get('attachment'); $file = new UploadedFile($_FILES['f_file']['tmp_name'], $_FILES['f_file']['name'], $_FILES['f_file']['type'], $_FILES['f_file']['size'], null, true); $attachment = $attachmentService->upload($file, $f_description, $language, array('user' => $user)); if ($f_language_specific != "yes") { $queryBuilder = $em->createQueryBuilder(); $attach = $queryBuilder->update('Newscoop\Entity\Attachment', 'a') ->set('a.language', 'null') ->where('a.id = ?1') ->setParameter(1, $attachment->getId()) ->getQuery(); $attach->execute(); } if ($f_content_disposition == "attachment") { $attachment->setContentDisposition($f_content_disposition); } } else { camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'files/popup.php')); } // Check if image was added successfully if (!$attachment) { setMessage($translator->trans("There was a problem uploading the file.", array(), 'article_files'), TRUE); camp_html_goto_page($BackLink); } if (!$inArchive) { ArticleAttachment::AddFileToArticle($attachment->getId(), $articleObj->getArticleNumber()); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('attachments'); $logtext = $translator->trans('File #$1 "$2" attached to article', array('$1' => $attachment->getId(), '$2' => $attachment->getName()), 'article_files'); Log::ArticleMessage($articleObj, $logtext, null, 38, TRUE); setMessage($translator->trans('File attached.', array(), 'article_files')); } else { ?> ================================================ FILE: newscoop/admin-files/articles/files/do_add_existing.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_add_msg($translator->trans('Invalid security token!')); ?> exists()) { camp_html_display_error($translator->trans("Article does not exist."), null, true); exit; } foreach ((array) $_POST['item'] as $attachmentId) { ArticleAttachment::AddFileToArticle((int) $attachmentId, $articleObj->getArticleNumber()); } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('attachments'); $logtext = $translator->trans('$1 file/s attached to article', array('$1' => sizeof($_POST['item'])), 'article_files'); Log::ArticleMessage($articleObj, $logtext, null, 38, TRUE); ?> ================================================ FILE: newscoop/admin-files/articles/files/do_del.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('DeleteFile')) { camp_html_display_error($translator->trans('You do not have the right to delete files.', array(), 'article_files'), null, true); exit; } $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_attachment_id = Input::Get('f_attachment_id', 'int', 0); // Check input if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), null, true); exit; } if (!$g_user->hasPermission("DeleteFile")) { camp_html_display_error($translator->trans("You do not have the right to delete file attachments.", array(), 'article_files'), null, true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans("Article does not exist."), null, true); exit; } $attachmentObj = new Attachment($f_attachment_id); if (!$attachmentObj->exists()) { camp_html_display_error($translator->trans('Attachment does not exist.', array(), 'article_files'), null, true); exit; } $filePath = dirname($attachmentObj->getStorageLocation()) . '/' . $attachmentObj->getFileName(); ArticleAttachment::RemoveAttachmentFromArticle($f_attachment_id, $f_article_number); $logtext = $translator->trans('File #$1 "$2" unattached', array( '$1' => $attachmentObj->getAttachmentId(), '$2' => $attachmentObj->getFileName()), 'article_files'); Log::ArticleMessage($articleObj, $logtext, null, 39); $attachmentFileName = $attachmentObj->getFileName(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('attachments'); // Go back to article. camp_html_add_msg($translator->trans("File $1 unattached.", array('$1' => $attachmentFileName), 'article_files'), "ok"); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'edit.php')); ?> ================================================ FILE: newscoop/admin-files/articles/files/do_edit.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('ChangeFile')) { camp_html_display_error($translator->trans('You do not have the right to change files.', array(), 'article_files'), null, true); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_attachment_id = Input::Get('f_attachment_id', 'int', 0); $f_description = trim(Input::Get('f_description', 'string', '', true)); $f_language_specific = Input::Get('f_language_specific'); $f_content_disposition = Input::Get('f_content_disposition'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), null, true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans("Article does not exist."), null, true); exit; } // This file can only be accessed if the user has the right to change articles // or the user created this article and it hasnt been published yet. if (!$articleObj->userCanModify($g_user)) { camp_html_display_error($translator->trans('You do not have the right to change the article.', array(), 'article_files'), null, true); exit; } $em = \Zend_Registry::get('container')->getService('em'); $attachment = $em->getRepository('Newscoop\Entity\Attachment')->findOneById($f_attachment_id); $language = $em->getRepository('Newscoop\Entity\Language')->findOneById($f_language_selected); $description = $em->getRepository('Newscoop\Entity\Translation')->findOneBy(array( 'phrase_id' => $attachment->getDescription()->getPhraseId(), 'language' => $language )); if (!$description) { $description = new \Newscoop\Entity\Translation($attachment->getDescription()->getPhraseId()); $description->setLanguage($language); $em->persist($description); } $description->setTranslationText($f_description); if ($f_language_specific == "yes") { $attachment->setLanguage($language); } else { $queryBuilder = $em->createQueryBuilder(); $attach = $queryBuilder->update('Newscoop\Entity\Attachment', 'a') ->set('a.language', 'null') ->where('a.id = ?1') ->setParameter(1, $f_attachment_id) ->getQuery(); $attach->execute(); } if ($f_content_disposition == "attachment" || empty($f_content_disposition)) { $attachment->setContentDisposition($f_content_disposition); } $em->flush(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('attachments'); // Go back to article. camp_html_add_msg($translator->trans("File '$1' updated.", array('$1' => $attachment->getName()), 'article_files'), "ok"); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'edit.php')); ?> ================================================ FILE: newscoop/admin-files/articles/files/edit.php ================================================ getService('translator'); $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_attachment_id = Input::Get('f_attachment_id', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); } $articleObj = new Article($f_language_selected, $f_article_number); $attachmentObj = new Attachment($f_attachment_id); if (!$articleObj->exists()) { camp_html_display_error($translator->trans("Article does not exist."), null, true); exit; } $isDisabled = ''; $isReadOnly = ''; if (!$g_user->hasPermission('ChangeFile')) { $isDisabled = 'disabled'; $isReadOnly = 'readonly'; $title = $translator->trans('File information', array(), 'article_files'); } else { $title = $translator->trans('Change file information', array(), 'article_files'); } // Add extra breadcrumb for image list. if ($f_publication_id > 0) { $extraCrumbs = array($translator->trans("Attachments", array(), 'article_files') => ""); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj, 'Article'=>$articleObj); camp_html_content_top($title, $topArray, true, true, $extraCrumbs); } else { $crumbs = array(); $crumbs[] = array($translator->trans("Actions"), ""); $crumbs[] = array($translator->trans("Edit article", array(), 'article_files'), camp_html_article_url($articleObj, $f_language_id, "edit.php")); $crumbs[] = array($translator->trans("Attachments", array(), 'article_files'), ""); $crumbs[] = array($title, ""); echo camp_html_breadcrumbs($crumbs); } ?>
    /left_arrow.png" BORDER="0"> ">trans("Back to Edit Article"); ?>

    getMimeType(), "image/") && (strstr($_SERVER['HTTP_ACCEPT'], $attachmentObj->getMimeType()) || (strstr($_SERVER['HTTP_ACCEPT'], "*/*")))) { ?>

    <?php echo htmlspecialchars($attachmentObj->getDescription($f_language_selected)); ?>

    getMimeType(), "application/") || strstr($attachmentObj->getMimeType(), "image/")) { ?> hasPermission('ChangeFile')) { ?>

    getMimeType(), "audio/") || strstr($attachmentObj->getMimeType(), "video/")) { echo new MediaPlayer($attachmentObj->getAttachmentUrl() . '?g_show_in_browser=1', $attachmentObj->getMimeType()); } ?>
    trans('File Name', array(), 'article_files'); ?>: getFileName()); ?>   /download.png" />
    trans('Description'); ?>: >
    trans('File Size', array(), 'article_files'); ?>: getSizeInBytes())); ?>
    trans("Should this file only be available for this translation of the article, or for all translations?", array(), 'article_files'); ?>
    getLanguageId()) { ?> checked >trans("Only this translation", array(), 'article_files'); ?>
    getLanguageId()) { ?> checked >trans("All translations", array(), 'article_files'); ?>
    trans("Do you want this file to open in the user's browser, or to automatically download?", array(), 'article_files'); ?>
    getContentDisposition()) { ?> checked >trans("Open in the browser", array(), 'article_files'); ?>
    getContentDisposition()) { ?> checked >trans("Automatically download", array(), 'article_files'); ?>

    ================================================ FILE: newscoop/admin-files/articles/files/popup.php ================================================ getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('system_preferences_service'); $inArchive = !empty($_REQUEST['archive']); if (!$inArchive) { $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); } if (camp_convert_bytes(($preferencesService->MaxUploadFileSize)) == false) { camp_html_add_msg($translator->trans("The maximum file upload size was not configured in Newscoop.", array(), 'article_files')); camp_html_add_msg($translator->trans("Please make sure you upgraded the database correctly: run $1 in a shell.", array( '$1' => $Campsite['BIN_DIR'].'/campsite-create-instance --db_name '.$Campsite['DATABASE_NAME']), 'article_files')); } if (!is_writable($Campsite['FILE_DIRECTORY'])) { camp_html_add_msg($translator->trans("Unable to add attachment.", array(), 'article_files')); camp_html_add_msg(camp_get_error_message(CAMP_ERROR_WRITE_DIR, $Campsite['FILE_DIRECTORY'])); } camp_html_display_msgs(); ?> <?php echo $translator->trans("Attach File to Article", array(), 'article_files'); ?>

    trans("Attach File to Article", array(), 'article_files'); ?>
    trans("File"); ?>:
    trans("Maximum Upload Size", array(), 'article_files'); p(" = " . $preferencesService->MaxUploadFileSize); ?>
    trans("Description"); ?>: " />
    trans("Should this file only be available for this translation of the article, or for all translations?", array(), 'article_files'); ?>
    trans("Only this translation", array(), 'article_files'); ?>
    trans("All translations", array(), 'article_files'); ?>
    trans("Do you want this file to open in the user's browser, or to automatically download?", array(), 'article_files'); ?>
    trans("Open in the browser", array(), 'article_files'); ?>
    trans("Automatically download", array(), 'article_files'); ?>
      
    ', "\n"; } // render list $list = new MediaList; $list->setColVis(FALSE) ->setHidden('content_disposition') ->setHidden('inUse') ->setClickable(FALSE) ->render(); ?>
    ================================================ FILE: newscoop/admin-files/articles/get.php ================================================ getService('translator'); if (!$g_user->hasPermission('CommentModerate')) { camp_html_display_error($translator->trans("You do not have the right to moderate comments.", array(), 'articles')); exit; } // These are optional, depending on whether you are in a section // or whether editing an article that doesnt have a location. $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_unlock = Input::Get('f_unlock', 'string', false, true); // $f_edit_mode can be "view" or "edit" $f_edit_mode = Input::Get('f_edit_mode', 'string', 'edit', true); // Whether to show comments at the bottom of the article // (you may not want to show them to speed up your loading time) // Selected language of the article $f_language_selected = (int) camp_session_get('f_language_selected', 0); // Fetch article $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('No such article.', array(), 'articles')); exit; } //getArticleAuthors() $articleInfo = array(); $articleData = $articleObj->getArticleData(); // Get article type fields. $dbColumns = $articleData->getUserDefinedColumns(false, true); foreach ($dbColumns as $dbColumn) { if ($dbColumn->getType() == ArticleTypeField::TYPE_SWITCH) { $value = $articleData->getProperty($dbColumn->getName()) ? $translator->trans('On', array(), 'articles') : $translator->trans('Off', array(), 'articles'); $articleInfo[htmlspecialchars($dbColumn->getDisplayName($articleObj->getLanguageId()))] = $value; } else { $articleInfo[htmlspecialchars($dbColumn->getDisplayName($articleObj->getLanguageId()))] = $articleData->getProperty($dbColumn->getName()); } } $articleInfo[$translator->trans('Title', array(), 'articles')] = $articleObj->getTitle(); // THIS IS REALLY BAD, NEVER LOCALIZE INTERNALLY $articleInfo[$translator->trans('Date')] = $articleObj->getCreationDate(); // But I don't know what possibly depends on this so we leave it for now $articleInfo['title'] = $articleObj->getTitle(); $articleInfo['date'] = $articleObj->getCreationDate(); $authors = ArticleAuthor::GetAuthorsByArticle($articleObj->getArticleNumber(), $articleObj->getLanguageId()); $authorsNames = array(); foreach ($authors as $author) { $authorsNames[] = $author->getName(); } $articleInfo['authors'] = $authorsNames; $articleInfo['authorsLabel'] = $translator->trans('Authors', array(), 'articles'); echo $this->view->json($articleInfo); ================================================ FILE: newscoop/admin-files/articles/images/add.php ================================================ getService('translator'); if (!$g_user->hasPermission("AddImage")) { camp_html_display_error($translator->trans("You do not have the right to add images", array(), 'media_archive'), null, true); exit; } $maxId = Image::GetMaxId(); $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } if (!is_writable($Campsite['IMAGE_DIRECTORY'])) { camp_html_add_msg($translator->trans("Unable to add new image.", array(), 'media_archive')); camp_html_add_msg(camp_get_error_message(CAMP_ERROR_WRITE_DIR, $Campsite['IMAGE_DIRECTORY'])); } $articleObj = new Article($f_language_selected, $f_article_number); $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); $ImageTemplateId = ArticleImage::GetUnusedTemplateId($f_article_number); $q_now = $g_ado_db->GetOne("SELECT LEFT(NOW(), 10)"); include_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/javascript_common.php"); camp_html_display_msgs(); ?>

     

    view->plupload('', array( 'url' => '../../media-archive/uploader.php', 'filters' => array( $translator->trans('Image files', array(), 'article_images') => "jpg,gif,png", ), )); ?> ================================================ FILE: newscoop/admin-files/articles/images/do_link.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_image_id = Input::Get('f_image_id', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), null, true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article does not exist.'), null, true); exit; } $imageObj = new Image($f_image_id); if (!$imageObj->exists()) { camp_html_display_error($translator->trans('Image does not exist.'), null, true); exit; } // This file can only be accessed if the user has the right to change articles // or the user created this article and it hasnt been published yet. if (!$g_user->hasPermission('AttachImageToArticle')) { camp_html_display_error($translator->trans("You do not have the right to attach images to articles.", array(), 'article_images'), null, true); exit; } ArticleImage::AddImageToArticle($f_image_id, $f_article_number); ?> ================================================ FILE: newscoop/admin-files/articles/images/do_unlink.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_image_id = Input::Get('f_image_id', 'int', 0); $f_image_template_id = Input::Get('f_image_template_id', 'int', 0); // Check input if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), null, true); exit; } // This file can only be accessed if the user has the right to change articles // or the user created this article and it hasnt been published yet. if (!$g_user->hasPermission('AttachImageToArticle')) { camp_html_display_error($translator->trans("You do not have the right to attach images to articles.", array(), 'article_images'), null, true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); $imageObj = new Image($f_image_id); $articleImage = new ArticleImage($f_article_number, $f_image_id, $f_image_template_id); $articleImage->delete(); Zend_Registry::get('container')->getService('image.rendition')->unsetArticleImageRenditions($f_article_number, $f_image_id); camp_html_add_msg($translator->trans('The image has been removed from the article.', array(), 'article_images'), "ok"); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'edit.php')); ?> ================================================ FILE: newscoop/admin-files/articles/images/popup.php ================================================ getService('translator'); if (!$g_user->hasPermission("AttachImageToArticle")) { $errorStr = $translator->trans('You do not have the right to attach images to articles.', array(), 'article_images'); camp_html_display_error($errorStr, null, true); exit; } $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_image_attach_mode = camp_session_get('f_image_attach_mode', 'new'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } $articleObj = new Article($f_language_selected, $f_article_number); ?> <?php echo $translator->trans("Attach Image To Article", array(), 'article_images'); ?> hasPermission('AddImage')) { ?>
    border-bottom: 1px solid #8baed1;">">trans("Attach New Image", array(), 'article_images'); ?> border-bottom: 1px solid #8baed1;">">trans("Attach Existing Image", array(), 'article_images'); ?>
    ================================================ FILE: newscoop/admin-files/articles/images/search.php ================================================ getService('translator'); $f_order_by = camp_session_get('f_order_by', 'id'); $f_order_direction = camp_session_get('f_order_direction', 'ASC'); $f_image_offset = camp_session_get('f_image_offset', 0); $f_search_string = camp_session_get('f_search_string', ''); $f_items_per_page = camp_session_get('f_items_per_page', 4); $f_source_filter_out = !isset($_REQUEST['f_source_all']) ? 'newsfeed' : false; if ($f_items_per_page < 4) { $f_items_per_page = 4; } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } // Build the links for ordering search results $OrderSign = ''; if ($f_order_direction == 'DESC') { $ReverseOrderDirection = "ASC"; $OrderSign = ""; } else { $ReverseOrderDirection = "DESC"; $OrderSign = ""; } $TotalImages = Image::GetTotalImages(); $imageSearch = new ImageSearch($f_search_string, $f_order_by, $f_order_direction, $f_image_offset, $f_items_per_page); if ($f_source_filter_out) { $imageSearch->setFilter( "Source", $f_source_filter_out, true ); } $imageSearch->run(); $imageData = $imageSearch->getImages(); $NumImagesFound = $imageSearch->getNumImagesFound(); //$orderDirectionUrl = camp_html_article_url($articleObj, $f_language_id, 'images/popup.php'); ?>
    Order by:
    trans("Items per page"); ?>:
    checked="checked" onclick="console.log(this.checked); document.getElementById('searchform').submit()" />
    0) { $pagerUrl = camp_html_article_url($articleObj, $f_language_id, "images/popup.php")."&". (!$f_source_filter_out ? "f_source_all=newsfeed&" : ""); $pager = new SimplePager($NumImagesFound, $f_items_per_page, "f_image_offset", $pagerUrl); ?>
    render(); ?>
    userCanModify($g_user)) { ?> class="list_row_even"class="list_row_odd"> userCanModify($g_user)) { ?>
    trans("Attach")); ?> trans("Thumbnail"); ?> trans("Description"); ?> trans("Photographer"); ?> trans("Place"); ?> trans("Date").'
    (yyyy-mm-dd)'; ?>
    trans("In use"); ?>
    /add.png">
      ">
    ">        
    trans('$1 images found', array('$1' => $NumImagesFound), 'article_images'); ?>
    render(); ?>
    ================================================ FILE: newscoop/admin-files/articles/images/view.php ================================================ getService('translator'); $f_backlink = Input::Get('Back', 'string', ''); $f_image_id = Input::Get('f_image_id', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } $imageObj = new Image($f_image_id); // Add extra breadcrumb for image list. ?>

    ================================================ FILE: newscoop/admin-files/articles/index.php ================================================ getService('translator'); $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); if (isset($_SESSION['f_language_selected'])) { $f_old_language_selected = (int)$_SESSION['f_language_selected']; } else { $f_old_language_selected = 0; } $f_language_selected = (int)camp_session_get('f_language_selected', 0); $offsetVarName = "f_article_offset_".$f_publication_id."_".$f_issue_number."_".$f_language_id."_".$f_section_number; $f_article_offset = camp_session_get($offsetVarName, 0); $ArticlesPerPage = 15; if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } if ($f_old_language_selected != $f_language_selected) { camp_session_set('f_article_offset', 0); $f_article_offset = 0; } if ($f_article_offset < 0) { $f_article_offset = 0; } $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $allArticleLanguages = $issueObj->getLanguages(); if (!in_array($f_language_selected, DbObjectArray::GetColumn($allArticleLanguages, 'Id'))) { $f_language_selected = 0; } $sqlOptions = array("LIMIT" => array("START" => $f_article_offset, "MAX_ROWS" => $ArticlesPerPage)); if ($f_language_selected) { // Only show a specific language. $totalArticles = Article::GetArticles($f_publication_id, $f_issue_number, $f_section_number, $f_language_selected, null, true); $allArticles = Article::GetArticles($f_publication_id, $f_issue_number, $f_section_number, $f_language_selected, $sqlOptions); $numUniqueArticles = $totalArticles; $numUniqueArticlesDisplayed = count($allArticles); } else { // Show articles in all languages. $totalArticles = Article::GetArticles($f_publication_id, $f_issue_number, $f_section_number, null, null, true); $allArticles = Article::GetArticlesGrouped($f_publication_id, $f_issue_number, $f_section_number, null, $f_language_id, $sqlOptions); $numUniqueArticles = Article::GetArticlesGrouped($f_publication_id, $f_issue_number, $f_section_number, null, null, null, true); $numUniqueArticlesDisplayed = count(array_unique(DbObjectArray::GetColumn($allArticles, 'Number'))); } $numArticlesThisPage = count($allArticles); $previousArticleNumber = 0; $pagerUrl = "index.php?f_publication_id=".$f_publication_id ."&f_issue_number=".$f_issue_number ."&f_section_number=".$f_section_number ."&f_language_id=".$f_language_id ."&f_language_selected=".$f_language_selected."&"; $pager = new SimplePager($numUniqueArticles, $ArticlesPerPage, $offsetVarName, $pagerUrl); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans('Article List', array(), 'articles') . ': ' . $this->view->escape($sectionObj->getName()), $topArray); $controller->view->headTitle($translator->trans('Article List', array(), 'articles').': '.$this->view->escape($sectionObj->getName()).' - Newscoop Admin', 'SET'); ?> hasPermission('AddArticle')) { ?>
    /left_arrow.png" BORDER="0"> trans("Section List"); ?> /add.png" BORDER="0"> trans("Add new article"); ?>
    setPublication($f_publication_id); $articlelist->setIssue($f_issue_number); $articlelist->setSection($f_section_number); $articlelist->setLanguage($f_language_id); $articlelist->setColVis(TRUE); if ($g_user->hasPermission('Publish')) { $articlelist->setOrder(TRUE); } $articlelist->setSearch(TRUE); if ($f_section_number) { $articlelist->setHidden('Section'); } $articlelist->renderActions(); $articlelist->render(); ?> ================================================ FILE: newscoop/admin-files/articles/la_import.php ================================================ getService('translator'); if ( isset($_POST['f_save']) && !SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('ManageIssue') || !$g_user->hasPermission('AddArticle')) { camp_html_display_error($translator->trans("You do not have the right to import XML archives.", array(), 'articles')); exit; } // Whether form was submitted $f_save = Input::Get('f_save', 'string', '', true); // The article location dropdowns cause this page to reload, // so we need to preserve the state with each refresh. $f_article_type = Input::Get('f_article_type', 'string', '', true); $f_article_language_id = Input::Get('f_article_language_id', 'int', 0, true); // For choosing the article location. $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); // Whether articles must be overwritten $f_overwrite_articles = Input::Get('f_overwrite_articles', 'string', '', true); // Build the back link $backlink = $Campsite['WEBSITE_URL'] . DIR_SEP . 'admin' . DIR_SEP . 'articles' . DIR_SEP . basename(__FILE__); if ($f_save) { if (isset($_FILES["f_input_file"])) { switch($_FILES["f_input_file"]['error']) { case 0: // UPLOAD_ERR_OK break; case 1: // UPLOAD_ERR_INI_SIZE case 2: // UPLOAD_ERR_FORM_SIZE camp_html_display_error($translator->trans("The file exceeds the allowed max file size.", array(), 'articles'), null, true); break; case 3: // UPLOAD_ERR_PARTIAL camp_html_display_error($translator->trans("The uploaded file was only partially uploaded. This is common when the maximum time to upload a file is low in contrast with the file size you are trying to input. The maximum input time is specified in php.ini", array(), 'articles'), null, true); break; case 4: // UPLOAD_ERR_NO_FILE camp_html_display_error($translator->trans("You must select a file to upload.", array(), 'articles'), null, true); break; case 6: // UPLOAD_ERR_NO_TMP_DIR case 7: // UPLOAD_ERR_CANT_WRITE camp_html_display_error($translator->trans("There was a problem uploading the file.", array(), 'articles'), null, true); break; } } else { camp_html_display_error($translator->trans("The file exceeds the allowed max file size.", array(), 'articles'), null, true); } } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $backlink); exit; } $articleTypes = ArticleType::GetArticleTypes(); $allPublications = Publication::GetPublications(); $allLanguages = Language::GetLanguages(null, null, null, array(), array(), true); $isValidXMLFile = false; if ($f_save && !empty($_FILES['f_input_file'])) { if (file_exists($_FILES['f_input_file']['tmp_name'])) { if (!($buffer = @file_get_contents($_FILES['f_input_file']['tmp_name']))) { camp_html_display_error($translator->trans("File could not be read.", array(), 'articles'), $backlink); exit; } try { $xml = new SimpleXMLElement($buffer); if (!is_object($xml)) { throw new Exception(); } } catch (Exception $e) { camp_html_display_error($translator->trans("File is not a valid XML file.", array(), 'articles'), $backlink); exit; } if (!isset($xml->article->name)) { camp_html_add_msg($translator->trans("Bad format in XML file.", array(), 'articles'), $backlink); } $isValidXMLFile = true; @unlink($_FILES['f_input_file']['tmp_name']); } else { camp_html_display_error($translator->trans("File does not exist.", array(), 'articles'), $backlink); exit; } } elseif ($f_save) { camp_html_add_msg($translator->trans("File could not be uploaded.", array(), 'articles'), $backlink); } if ($isValidXMLFile) { if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.'), $backlink); exit; } if ($f_issue_number > 0) { $issueObj = new Issue($f_publication_id, $f_article_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.'), $backlink); exit; } if ($f_section_number > 0) { $sectionObj = new Section($f_publication_id, $f_issue_number, $f_article_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.'), $backlink); exit; } } } } // Loads article data from XML file into database $xmlArticle = array(); $articleFields = array(); $errorMessages = array(); $articleCount = 0; foreach ($xml->article as $article) { $existingArticles = Article::GetByName((string) $article->name, $f_publication_id, $f_issue_number, $f_section_number, $f_article_language_id, true); // There is already an article with same name and language if (count($existingArticles) > 0) { $existingArticle = array_pop($existingArticles); // Is overwrite articles false? then skip and process next article if ($f_overwrite_articles == 'N') { $errorMessages[][] = $translator->trans('Article $1 already exists, and was not overwritten.
    ',array('$1' => $article->name), 'articles'); continue; } } if (isset($existingArticle) && $existingArticle->exists()) { $articleObj = $existingArticle; } else { $articleObj = new Article($f_article_language_id); $articleName = (string) $article->name; $articleObj->create($f_article_type, $articleName, $f_publication_id, $f_issue_number, $f_section_number); } // Checks whether article was successfully created if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article could not be created.', array(), 'articles'), $backlink); exit; } $articleFields['name'] = true; // Number of articles successfully created in database $articleCount++; $errorMessages[$articleCount][] = '

    ' . htmlspecialchars((string) $article->name) . '

    '; $xmlArticle = get_object_vars($article); $articleTypeObj = $articleObj->getArticleData(); $dbColumns = $articleTypeObj->getUserDefinedColumns(false, true); $articleTypeFields = array(); foreach ($dbColumns as $dbColumn) { $fieldName = $dbColumn->getPrintName(); $field = strtolower($fieldName); if (!isset($article->$field)) { $errorMessages[$articleCount][] = 'The article type field "' .$fieldName .'" does not match any field from XML input file.
    '; continue; } $articleFields[$field] = true; $articleTypeObj->setProperty($dbColumn->getName(), (string) $article->$field); } // Updates the article creator and author $articleObj->setCreatorId($g_user->getUserId()); $isAuthorFromCreator = FALSE; if (isset($article->author) && !empty($article->author)) { $authorName = (string) $article->author; } else { $authorName = (string) $g_user->getRealName(); $isAuthorFromCreator = TRUE; } $authorObj = new Author($authorName); if (!$authorObj->exists()) { $authorData = Author::ReadName($authorName); if ($isAuthorFromCreator) { $authorData['email'] = $g_user->getEmail(); } $authorObj->create($authorData); } if ($authorObj->exists()) { $articleObj->setAuthor($authorObj); $articleFields['author'] = true; } // Updates the article if (isset($article->keywords) && !empty($article->keywords)) { $articleObj->setKeywords((string) $article->keywords); } $articleFields['keywords'] = true; foreach($xmlArticle as $articleFieldName => $articleFieldValue) { if (!array_key_exists($articleFieldName, $articleFields)) { $errorMessages[$articleCount][] = '"' . $articleFieldName .'" field in XML file ' . 'was not loaded into database as there is not any ' . 'article type field matching it.
    '; } } } camp_html_add_msg($translator->trans("$1 articles successfully imported.", array('$1' => $articleCount), 'articles'), "ok"); } // Gets all issues $allIssues = array(); if ($f_publication_id > 0) { $allIssues = Issue::GetIssues($f_publication_id, $f_article_language_id, null, null, null, false, array("LIMIT" => 300, "ORDER BY" => array("Number" => "DESC")), true); // Automatically selects the issue if there is only one if (count($allIssues) == 1) { $tmpIssue = camp_array_peek($allIssues); $f_issue_number = $tmpIssue->getIssueNumber(); } } // Gets all the sections $allSections = array(); if ($f_issue_number > 0) { $destIssue = new Issue($f_publication_id); $allSections = Section::GetSections($f_publication_id, $f_issue_number, $f_article_language_id, null, null, array("ORDER BY" => array("Number" => "DESC")), true); // Automatically selects the section if there is only one if (count($allSections) == 1) { $tmpSection = camp_array_peek($allSections); $f_section_number = $tmpSection->getSectionNumber(); } } $crumbs = array(); $crumbs[] = array($translator->trans("Actions"), ""); $crumbs[] = array($translator->trans("Import XML", array(), 'articles'), ""); echo camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans("Import XML", array(), 'articles').' - Newscoop Admin', 'SET'); ?>

    trans("Import XML", array(), 'articles'); ?>
    trans("Article Type", array(), 'articles'); ?>:
    trans("Language"); ?>:
    trans("Publication"); ?>: 0 && count($allPublications) > 1) { ?>
    trans("Issue"); ?>: 0) && (count($allIssues) >= 1)) { ?>   (trans('Optional', array(), 'articles'); ?>)
    trans("Section"); ?>: 0) && (count($allSections) >= 1)) { ?>   (trans('Optional', array(), 'articles'); ?>)
    trans("Overwrite articles with matching names", array(), 'articles'); ?>?: /> trans("Yes"); ?> /> trans("No"); ?>
    trans("Input File", array(), 'articles'); ?>:


    0) { ?>
    trans("Error List", array(), 'articles'); ?>
    $errors) { for ($i = 0; $i < sizeof($errors); $i++) { print($errors[$i]); } } ?>
    ================================================ FILE: newscoop/admin-files/articles/locations/country_codes.php ================================================ 'AF', 'Aland Islands / Åland Islands' => 'AX', 'Albania' => 'AL', 'Algeria' => 'DZ', 'American Samoa' => 'AS', 'Andorra' => 'AD', 'Angola' => 'AO', 'Anguilla' => 'AI', 'Antarctica' => 'AQ', 'Antigua and Barbuda' => 'AG', 'Argentina' => 'AR', 'Armenia' => 'AM', 'Aruba' => 'AW', 'Australia' => 'AU', 'Austria' => 'AT', 'Azerbaijan' => 'AZ', 'Bahamas' => 'BS', 'Bahrain' => 'BH', 'Bangladesh' => 'BD', 'Barbados' => 'BB', 'Belarus' => 'BY', 'Belgium' => 'BE', 'Belize' => 'BZ', 'Benin' => 'BJ', 'Bermuda' => 'BM', 'Bhutan' => 'BT', 'Bolivia, Plurinational State of' => 'BO', 'Bosnia and Herzegovina' => 'BA', 'Botswana' => 'BW', 'Bouvet Island' => 'BV', 'Brazil' => 'BR', 'British Indian Ocean Territory' => 'IO', 'Brunei Darussalam' => 'BN', 'Bulgaria' => 'BG', 'Burkina Faso' => 'BF', 'Burundi' => 'BI', 'Cambodia' => 'KH', 'Cameroon' => 'CM', 'Canada' => 'CA', 'Cape Verde' => 'CV', 'Cayman Islands' => 'KY', 'Central African Republic' => 'CF', 'Chad' => 'TD', 'Chile' => 'CL', 'China' => 'CN', 'Christmas Island' => 'CX', 'Cocos (Keeling) Islands' => 'CC', 'Colombia' => 'CO', 'Comoros' => 'KM', 'Congo' => 'CG', 'Congo, the Democratic Republic of the' => 'CD', 'Cook Islands' => 'CK', 'Costa Rica' => 'CR', 'Cote d\'Ivoire / Côte d\'Ivoire' => 'CI', 'Croatia' => 'HR', 'Cuba' => 'CU', 'Cyprus' => 'CY', 'Czech Republic' => 'CZ', 'Denmark' => 'DK', 'Djibouti' => 'DJ', 'Dominica' => 'DM', 'Dominican Republic' => 'DO', 'Ecuador' => 'EC', 'Egypt' => 'EG', 'El Salvador' => 'SV', 'Equatorial Guinea' => 'GQ', 'Eritrea' => 'ER', 'Estonia' => 'EE', 'Ethiopia' => 'ET', 'Falkland Islands (Malvinas)' => 'FK', 'Faroe Islands' => 'FO', 'Fiji' => 'FJ', 'Finland' => 'FI', 'France' => 'FR', 'French Guiana' => 'GF', 'French Polynesia' => 'PF', 'French Southern Territories' => 'TF', 'Gabon' => 'GA', 'Gambia' => 'GM', 'Georgia' => 'GE', 'Germany' => 'DE', 'Ghana' => 'GH', 'Gibraltar' => 'GI', 'Greece' => 'GR', 'Greenland' => 'GL', 'Grenada' => 'GD', 'Guadeloupe' => 'GP', 'Guam' => 'GU', 'Guatemala' => 'GT', 'Guernsey' => 'GG', 'Guinea' => 'GN', 'Guinea-Bissau' => 'GW', 'Guyana' => 'GY', 'Haiti' => 'HT', 'Heard Island and McDonald Islands' => 'HM', 'Holy See (Vatican City State)' => 'VA', 'Honduras' => 'HN', 'Hong Kong' => 'HK', 'Hungary' => 'HU', 'Iceland' => 'IS', 'India' => 'IN', 'Indonesia' => 'ID', 'Iran, Islamic Republic of' => 'IR', 'Iraq' => 'IQ', 'Ireland' => 'IE', 'Isle of Man' => 'IM', 'Israel' => 'IL', 'Italy' => 'IT', 'Jamaica' => 'JM', 'Japan' => 'JP', 'Jersey' => 'JE', 'Jordan' => 'JO', 'Kazakhstan' => 'KZ', 'Kenya' => 'KE', 'Kiribati' => 'KI', 'Korea, Democratic People\'s Republic of' => 'KP', 'Korea, Republic of' => 'KR', 'Kuwait' => 'KW', 'Kyrgyzstan' => 'KG', 'Lao People\'s Democratic Republic' => 'LA', 'Latvia' => 'LV', 'Lebanon' => 'LB', 'Lesotho' => 'LS', 'Liberia' => 'LR', 'Libyan Arab Jamahiriya' => 'LY', 'Liechtenstein' => 'LI', 'Lithuania' => 'LT', 'Luxembourg' => 'LU', 'Macao' => 'MO', 'Macedonia, the former Yugoslav Republic of' => 'MK', 'Madagascar' => 'MG', 'Malawi' => 'MW', 'Malaysia' => 'MY', 'Maldives' => 'MV', 'Mali' => 'ML', 'Malta' => 'MT', 'Marshall Islands' => 'MH', 'Martinique' => 'MQ', 'Mauritania' => 'MR', 'Mauritius' => 'MU', 'Mayotte' => 'YT', 'Mexico' => 'MX', 'Micronesia, Federated States of' => 'FM', 'Moldova, Republic of' => 'MD', 'Monaco' => 'MC', 'Mongolia' => 'MN', 'Montenegro' => 'ME', 'Montserrat' => 'MS', 'Morocco' => 'MA', 'Mozambique' => 'MZ', 'Myanmar' => 'MM', 'Namibia' => 'NA', 'Nauru' => 'NR', 'Nepal' => 'NP', 'Netherlands' => 'NL', 'Netherlands Antilles' => 'AN', 'New Caledonia' => 'NC', 'New Zealand' => 'NZ', 'Nicaragua' => 'NI', 'Niger' => 'NE', 'Nigeria' => 'NG', 'Niue' => 'NU', 'Norfolk Island' => 'NF', 'Northern Mariana Islands' => 'MP', 'Norway' => 'NO', 'Oman' => 'OM', 'Pakistan' => 'PK', 'Palau' => 'PW', 'Palestinian Territory, Occupied' => 'PS', 'Panama' => 'PA', 'Papua New Guinea' => 'PG', 'Paraguay' => 'PY', 'Peru' => 'PE', 'Philippines' => 'PH', 'Pitcairn' => 'PN', 'Poland' => 'PL', 'Portugal' => 'PT', 'Puerto Rico' => 'PR', 'Qatar' => 'QA', 'Reunion / Réunion' => 'RE', 'Romania' => 'RO', 'Russian Federation' => 'RU', 'Rwanda' => 'RW', 'Saint Barthélemy' => 'BL', 'Saint Helena, Ascension and Tristan da Cunha' => 'SH', 'Saint Kitts and Nevis' => 'KN', 'Saint Lucia' => 'LC', 'Saint Martin (French part)' => 'MF', 'Saint Pierre and Miquelon' => 'PM', 'Saint Vincent and the Grenadines' => 'VC', 'Samoa' => 'WS', 'San Marino' => 'SM', 'Sao Tome and Principe' => 'ST', 'Saudi Arabia' => 'SA', 'Senegal' => 'SN', 'Serbia' => 'RS', 'Seychelles' => 'SC', 'Sierra Leone' => 'SL', 'Singapore' => 'SG', 'Slovakia' => 'SK', 'Slovenia' => 'SI', 'Solomon Islands' => 'SB', 'Somalia' => 'SO', 'South Africa' => 'ZA', 'South Georgia and the South Sandwich Islands' => 'GS', 'Spain' => 'ES', 'Sri Lanka' => 'LK', 'Sudan' => 'SD', 'Suriname' => 'SR', 'Svalbard and Jan Mayen' => 'SJ', 'Swaziland' => 'SZ', 'Sweden' => 'SE', 'Switzerland' => 'CH', 'Syrian Arab Republic' => 'SY', 'Taiwan, Province of China' => 'TW', 'Tajikistan' => 'TJ', 'Tanzania, United Republic of' => 'TZ', 'Thailand' => 'TH', 'Timor-Leste' => 'TL', 'Togo' => 'TG', 'Tokelau' => 'TK', 'Tonga' => 'TO', 'Trinidad and Tobago' => 'TT', 'Tunisia' => 'TN', 'Turkey' => 'TR', 'Turkmenistan' => 'TM', 'Turks and Caicos Islands' => 'TC', 'Tuvalu' => 'TV', 'Uganda' => 'UG', 'Ukraine' => 'UA', 'United Arab Emirates' => 'AE', 'United Kingdom' => 'GB', 'United States' => 'US', 'United States Minor Outlying Islands' => 'UM', 'Uruguay' => 'UY', 'Uzbekistan' => 'UZ', 'Vanuatu' => 'VU', 'Venezuela, Bolivarian Republic of' => 'VE', 'Viet Nam' => 'VN', 'Virgin Islands, British' => 'VG', 'Virgin Islands, U.S.' => 'VI', 'Wallis and Futuna' => 'WF', 'Western Sahara' => 'EH', 'Yemen' => 'YE', 'Zambia' => 'ZM', 'Zimbabwe' => 'ZW', ); ================================================ FILE: newscoop/admin-files/articles/locations/do_unlink.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); // Check input if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), null, true); exit; } // This file can only be accessed if the user has the right to change articles // or the user created this article and it hasnt been published yet. if (!$g_user->hasPermission('ChangeArticle')) { camp_html_display_error($translator->trans('You do not have the right to remove maps from articles.', array(), 'geolocation'), null, true); exit; } $language_usage = $f_language_selected; if ((!$language_usage) || (0 == $language_usage)) { $language_usage = $f_language_id; } $articleObj = new Article($f_language_selected, $f_article_number); Geo_Map::UnlinkArticle($articleObj); camp_html_add_msg($translator->trans('The map has been removed from the article.', array(), 'geolocation'), 'ok'); camp_html_goto_page(camp_html_article_url($articleObj, $f_language_id, 'edit.php')); ?> ================================================ FILE: newscoop/admin-files/articles/locations/filter.php ================================================ getService('translator'); header('Content-Type: text/html; charset=utf-8'); echo '' . "\n"; ?> <?php echo $translator->trans('Geo-filtering', array(), 'geolocation'); ?>
    ================================================ FILE: newscoop/admin-files/articles/locations/popup.php ================================================ getService('translator'); $f_language_id = Input::Get('f_language_selected', 'int', 0); if (0 == $f_language_id) { $f_language_id = Input::Get('f_language_id', 'int', 0); } $f_article_number = Input::Get('f_article_number', 'int', 0); $map_article_spec = '' . $f_article_number . '_' . $f_language_id; if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } $articleObj = new Article($f_language_id, $f_article_number); $cnf_html_dir = $Campsite['HTML_DIR']; $cnf_website_url = $Campsite['WEBSITE_URL']; $geo_map_info = Geo_Preferences::GetMapInfo($cnf_html_dir, $cnf_website_url); $geo_map_incl = Geo_Preferences::PrepareMapIncludes($geo_map_info['incl_obj']); $geo_map_json = ""; $geo_map_json .= json_encode($geo_map_info['json_obj']); $geo_map_usage = Geo_Map::ReadMapInfo('article', $f_article_number); $geo_map_usage_json = ""; $geo_map_usage_json .= json_encode($geo_map_usage); $geo_icons_info = Geo_Preferences::GetIconsInfo($cnf_html_dir, $cnf_website_url); $geo_icons_json = ""; $geo_icons_json .= json_encode($geo_icons_info['json_obj']); $geo_popups_info = Geo_Preferences::GetPopupsInfo($cnf_html_dir, $cnf_website_url); $geo_popups_json = ""; $geo_popups_json .= json_encode($geo_popups_info['json_obj']); ?> <?php echo $translator->trans('Setting Map Locations', array(), 'geolocation'); ?> \n"; } echo $include_files_tags; ?>
    V
    600 x 400
    H
    trans('Map size', array(), 'geolocation'); ?>:
    trans('OK'); ?>
    trans('Name and describe this location', array(), 'geolocation'); ?>.
    trans('Add an image to this location', array(), 'geolocation'); ?>.
    trans('Fill in image link, like', array(), 'geolocation') . " " . "http://www.example.net/image.png"; ?>
    1. trans('Change image display size', array(), 'geolocation'); ?>.
    trans('Add a video to this location', array(), 'geolocation'); ?>.
    trans('Fill in video ID, link or file name, for YouTube, Vimeo, or flash video.', array(), 'geolocation'); $video_desc_youtube = $translator->trans('Fill in youtube ID or link, e.g.', array(), 'geolocation') . ' ' . 'http://youtu.be/c9WzlvLn3X0'; $video_desc_vimeo = $translator->trans('Fill in vimeo ID or link, e.g', array(), 'geolocation') . ' ' . 'http://vimeo.com/21757310'; $video_desc_local_swf = $translator->trans('Fill in local swf flash file name or link, e.g.', array(), 'geolocation') . ' ' . 'http://www.example.net/video.swf'; $video_desc_local_flv = $translator->trans('Fill in local flv flash file name or link, e.g.', array(), 'geolocation') . ' ' . 'example.flv'; ?>
    1. trans('Change video display size', array(), 'geolocation'); ?>.
    trans('Change icon of this location', array(), 'geolocation'); ?>.
    1. trans('selected marker icon', array(), 'geolocation'); ?>: 
    2.  
    ================================================ FILE: newscoop/admin-files/articles/locations/preview.php ================================================ getService('translator'); $f_language_id = Input::Get('f_language_selected', 'int', 0); if (0 == $f_language_id) { $f_language_id = Input::Get('f_language_id', 'int', 0); } $f_article_number = Input::Get('f_article_number', 'int', 0); $loaded_from = Input::Get('loader', 'string', 'map', true); $f_focus = Input::Get('focus', 'string', 'default', true); $focus_default = true; if ('revert' == $f_focus) {$focus_default = false;} if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI'], true); exit; } ?> <?php echo $translator->trans('Map Preview', array(), 'geolocation'); ?> $auto_focus, 'load_common' => true); echo Geo_Map::GetMapTagHeader($f_article_number, $f_language_id, $map_width, $map_height, $map_options); ?>
    hasPermission('ChangeArticle'); if ($canEdit) { $edit_str = $translator->trans('Edit'); if ("map" == strtolower($loaded_from)) { $edit_str = $translator->trans('Return to edit', array(), 'geolocation'); } ?>
    trans('Map preview', array(), 'geolocation'); ?>
    ================================================ FILE: newscoop/admin-files/articles/locations/search.php ================================================ getService('translator'); ?> <?php echo $translator->trans('Map Search Example', array(), 'geolocation'); ?> 'top_left_longitude', 'tl_lat' => 'top_left_latitude', 'br_lon' => 'bottom_right_longitude', 'br_lat' => 'bottom_right_latitude'); $map_width = 600; $map_height = 400; echo Geo_Map::GetMapSearchHeader($map_width, $map_height, $bbox_divs); ?>
      Top left
    1. longitude:
    2. latitude:
      Bottom right
    1. longitude:
    2. latitude:
    ================================================ FILE: newscoop/admin-files/articles/multi_autopublish.php ================================================ getService('translator'); if (!$g_user->hasPermission("Publish")) { camp_html_display_error($translator->trans("You do not have the right to schedule issues or articles for automatic publishing.", array(), 'articles')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_code = Input::Get('f_article_code', 'array', 0); // Get all the articles. $articles = array(); $errorArticles = array(); foreach ($f_article_code as $code) { list($articleId, $languageId) = explode("_", $code); $tmpArticle = new Article($languageId, $articleId); if ($tmpArticle->getWorkflowStatus() != 'N') { $articles[] = $tmpArticle; } else { $errorArticles[] = $tmpArticle; } } if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } $crumbs = array($translator->trans("Articles") => "/$ADMIN/articles/index.php?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_language_id=$f_language_id&f_language_selected=$f_language_selected"); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans("Article automatic publishing schedule"), $topArray, true, false, $crumbs); ?> 0) { ?>

    trans("The following articles are new, it is not possible to schedule them for automatic publishing", array(), 'articles'); ?>:

    trans("Name"); ?>
    getTitle()); ?>
    0) { ?>

    getLanguageId()); ?>">
    trans("Schedule a new action", array(), 'articles'); ?>
    trans("Articles"); ?>:
    getTitle()); ?>
    trans("Date"); ?>:
    trans("Time"); ?>: :
    trans("Actions"); ?>
    trans("Publish"); ?>:
    trans("Front page"); ?>:
    trans("Section page"); ?>:
    ================================================ FILE: newscoop/admin-files/articles/multidate/popup.php ================================================ getService('translator'); ?> <?php echo $translator->trans("Multi date events", array(), 'articles'); ?> getType(); $article_type = new ArticleType($article_type_name); $article_type_columns = $article_type->getUserDefinedColumns(); //var_dump($article_type_columns); ?>

    trans('Multi date events', array(), 'articles'); ?>

    trans('Specific dates', array(), 'articles'); ?>
    trans('Recurring', array(), 'articles'); ?>


    ================================================ FILE: newscoop/admin-files/articles/playlist/popup.php ================================================ getRequest() ->clearParams() ->setDispatched(false) ->clearParams() ->setActionName('article') ->setControllerName('playlist') ->setModuleName('admin') ->setParam('id', Input::Get('f_article_number', 'int', 1) ); ; $front->getDispatcher()->dispatch($front->getRequest(), $front->getResponse()); $front->getResponse()->getBody(); ?> ================================================ FILE: newscoop/admin-files/articles/post.php ================================================ getService('translator'); require_once($GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/articles/article_common.php"); if (!SecurityToken::isValid()) { $data = new stdclass(); $data->Results = new stdclass(); $data->Results->f_message = $translator->trans('Invalid security token!'); echo json_encode($data); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $f_article_author = Input::Get('f_article_author', 'array', array(), true); $f_article_author_type = Input::Get('f_article_author_type', 'array', array(), true); $f_article_title = Input::Get('f_article_title'); $f_message = Input::Get('f_message', 'string', '', true); $f_creation_date = Input::Get('f_creation_date'); $f_publish_date = Input::Get('f_publish_date', 'string', '', true); $f_comment_status = Input::Get('f_comment_status', 'string', '', true); $data = new stdclass(); $data->Results = new stdclass(); $data->Results->f_publication_id = $f_publication_id; $data->Results->f_issue_number = $f_issue_number; $data->Results->f_section_number = $f_section_number; $data->Results->f_language_id = $f_language_id; $data->Results->f_language_selected = $f_language_selected; $data->Results->f_article_number = $f_article_number; $data->Results->f_article_author = $f_article_author; $data->Results->f_article_author_type = $f_article_author_type; $data->Results->f_article_title = $f_article_title; $data->Results->f_message = $f_message; $data->Results->f_creation_date = $f_creation_date; $data->Results->f_publish_date = $f_publish_date; $data->Results->f_comment_status = $f_comment_status; if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), isset($BackLink) ? $Backlink : null); exit; } // Fetch article $articleObj = new Article($f_language_selected, $f_article_number); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('No such article.', array(), 'articles'), $BackLink); exit; } $articleTypeObj = $articleObj->getArticleData(); $dbColumns = $articleTypeObj->getUserDefinedColumns(false, true); $articleFields = array(); foreach ($dbColumns as $dbColumn) { if ($dbColumn->getType() == ArticleTypeField::TYPE_BODY) { $dbColumnParam = $dbColumn->getName() . '_' . $f_article_number; } else { $dbColumnParam = $dbColumn->getName(); } if (isset($_REQUEST[$dbColumnParam])) { if($dbColumn->getType() == ArticleTypeField::TYPE_TEXT && $dbColumn->getMaxSize()!=0 && $dbColumn->getMaxSize()!='') { $fieldValue = trim(Input::Get($dbColumnParam)); $articleFields[$dbColumn->getName()] = mb_strlen($fieldValue, 'utf8') > $dbColumn->getMaxSize() ? substr($fieldValue, 0, $dbColumn->getMaxSize()) : $fieldValue; } else { $articleFields[$dbColumn->getName()] = trim(Input::Get($dbColumnParam)); } } else { unset($articleFields[$dbColumn->getName()]); // ignore if not set } } if (!empty($f_message)) { camp_html_add_msg($f_message, "ok"); } if (!$articleObj->userCanModify($g_user)) { camp_html_add_msg($translator->trans("You do not have the right to change this article. You may only edit your own articles and once submitted an article can only be changed by authorized users.", array(), 'articles')); camp_html_goto_page($BackLink); exit; } // Only users with a lock on the article can change it. if ($articleObj->isLocked() && ($g_user->getUserId() != $articleObj->getLockedByUser())) { $diffSeconds = time() - strtotime($articleObj->getLockTime()); $hours = floor($diffSeconds/3600); $diffSeconds -= $hours * 3600; $minutes = floor($diffSeconds/60); $lockUser = new User($articleObj->getLockedByUser()); camp_html_add_msg($translator->trans('Could not save the article. It has been locked by $1 $2 hours and $3 minutes ago.', array('$1' => $lockUser->getRealName(), '$2' => $hours, '$3' => $minutes), 'articles')); camp_html_goto_page($BackLink); exit; } // Update the article author $blogService = Zend_Registry::get('container')->getService('blog'); $blogInfo = $blogService->getBlogInfo($g_user); if (!empty($f_article_author)) { $em = Zend_Registry::get('container')->getService('em'); $dispatcher = Zend_Registry::get('container')->getService('dispatcher'); $language = $em->getRepository('Newscoop\Entity\Language')->findOneById($articleObj->getLanguageId()); $authors = $em->getRepository('Newscoop\Entity\ArticleAuthor')->getArticleAuthors($articleObj->getArticleNumber(), $language->getCode())->getArrayResult(); ArticleAuthor::OnArticleLanguageDelete($articleObj->getArticleNumber(), $articleObj->getLanguageId()); foreach ($authors as $author) { $dispatcher->dispatch("user.set_points", new \Newscoop\EventDispatcher\Events\GenericEvent($this, array('authorId' => $author['fk_author_id']))); } $i = 0; foreach ($f_article_author as $author) { $authorObj = new Author($author); $author = trim($author); if (!$authorObj->exists() && isset($author[0])) { if ($blogService->isBlogger($g_user)) { // blogger can't create authors continue; } $authorData = Author::ReadName($author); $authorObj->create($authorData); } elseif ($blogService->isBlogger($g_user)) { // test if using authors from blog if (!$blogService->isBlogAuthor($authorObj, $blogInfo)) { continue; } } // Sets the author type selected $author_type = $f_article_author_type[$i]; $authorObj->setType($author_type); // Links the author to the article if ($authorObj->getId() != 0) { $articleAuthorObj = new ArticleAuthor($articleObj->getArticleNumber(), $articleObj->getLanguageId(), $authorObj->getId(), $author_type, $i + 1); } if (isset($articleAuthorObj) && !$articleAuthorObj->exists()) { $articleAuthorObj->create(); $dispatcher->dispatch("user.set_points", new \Newscoop\EventDispatcher\Events\GenericEvent($this, array('authorId' => $articleAuthorObj->getAuthorId()))); } $i++; } } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); // Update the article. $articleObj->setTitle($f_article_title); $articleObj->setIsIndexed(false); if (!empty($f_comment_status)) { if ($f_comment_status == "enabled" || $f_comment_status == "locked") { $commentsEnabled = true; } else { $commentsEnabled = false; } // If status has changed, then you need to show/hide all the comments // as appropriate. if ($articleObj->commentsEnabled() != $commentsEnabled) { $articleObj->setCommentsEnabled($commentsEnabled); global $controller; $repository = $controller->getHelper('entity')->getRepository('Newscoop\Entity\Comment'); $repository->setArticleStatus($f_article_number, $f_language_selected, $commentsEnabled?STATUS_APPROVED:STATUS_HIDDEN); $repository->flush(); } $articleObj->setCommentsLocked($f_comment_status == "locked"); $cacheKey = $cacheService->getCacheKey(array('are_comments_enabled', $articleObj->getProperty('IdPublication'), $articleObj->getProperty('Type'), $articleObj->getArticleNumber(), $articleObj->getLanguageId()), 'publication'); $cacheService->delete($cacheKey); } // Make sure that the time stamp is updated. $articleObj->setProperty('time_updated', 'NOW()', true, true); // Verify creation date is in the correct format. // If not, dont change it. if (preg_match("/\d{4}-\d{2}-\d{2}/", $f_creation_date)) { $articleObj->setCreationDate($f_creation_date); } // Verify publish date is in the correct format. // If not, dont change it. if (preg_match("/\d{4}-\d{2}-\d{2}/", $f_publish_date)) { $articleObj->setPublishDate($f_publish_date); } foreach ($articleFields as $dbColumnName => $text) { $articleTypeObj->setProperty($dbColumnName, $text); } Log::ArticleMessage($articleObj, $translator->trans('Content edited', array(), 'articles'), $g_user->getUserId(), 37); ArticleIndex::RunIndexer(3, 10, true); if (CampTemplateCache::factory()) { CampTemplateCache::factory()->update(array( 'language' => $articleObj->getLanguageId(), 'publication' => $articleObj->getPublicationId(), 'issue' => $articleObj->getIssueNumber(), 'section' => $articleObj->getSectionNumber(), 'article' => $articleObj->getArticleNumber(), ), !($articleObj->isPublished() || $articleObj->m_published)); } $cacheService->clearNamespace('authors'); $cacheService->clearNamespace('article'); $cacheService->clearNamespace('article_type'); $cacheService->clearNamespace('boxarticles'); echo json_encode($data); exit; ================================================ FILE: newscoop/admin-files/articles/preview.php ================================================ getService('translator'); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_article_number = Input::Get('f_article_number', 'int', 0); $languageObj = new Language($f_language_selected); $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); $articleObj = new Article($f_language_selected, $f_article_number); $errorStr = ""; if (!$articleObj->exists()) { $errorStr = $translator->trans('There was an error reading request parameters.', array(), 'articles'); camp_html_display_error($errorStr, null, true); } /** * @author Mihai Balaceanu * New theme management */ $resourceId = new ResourceId('Publication/Edit'); $themeManagementService = $resourceId->getService(IThemeManagementService::NAME_1); /* @var $themeManagementService \Newscoop\Service\Implementation\ThemeManagementServiceLocal */ $outputSettingSectionService = $resourceId->getService(IOutputSettingSectionService::NAME); /* @var $outputSettingSectionService \Newscoop\Service\Implementation\OutputSettingSectionServiceDoctrine */ $outputSettingIssueService = $resourceId->getService(IOutputSettingIssueService::NAME); /* @var $outputSettingIssueService \Newscoop\Service\Implementation\OutputSettingIssueServiceDoctrine */ $issueService = $resourceId->getService(IIssueService::NAME); /* @var $issueService \Newscoop\Service\Implementation\IssueServiceDoctrine */ $outputService = $resourceId->getService(IOutputService::NAME); $syncRsc = $resourceId->getService(ISyncResourceService::NAME); $outputSectionSettings = current($outputSettingSectionService->findBySection($sectionObj->getSectionId())); /* @var $outputIssueSettings \Newscoop\Entity\Output\OutputSettingsIssue */ $outputIssueSettings = current($outputSettingIssueService->findByIssue($issueObj->getIssueId())); /* @var $outputIssueSettings \Newscoop\Entity\Output\OutputSettingsIssue */ $publicationThemes = $themeManagementService->getThemes($publicationObj->getPublicationId()); if (!$outputIssueSettings) { if (count($publicationThemes) > 0) { $themePath = $publicationThemes[0]->getPath(); $outputIssueSettings = new OutputSettingsIssue(); $outputIssueSettings->setOutput($outputService->findByName('Web')); $outputIssueSettings->setIssue($issueService->getById($issueObj->getIssueId())); $outputIssueSettings->setThemePath($syncRsc->getThemePath($themePath)); $outputIssueSettings->setFrontPage(null); $outputIssueSettings->setSectionPage(null); $outputIssueSettings->setArticlePage(null); $outputSettingIssueService->insert($outputIssueSettings); } else { $errorStr = $translator->trans('This issue cannot be previewed. Please make sure the publication has a theme assigned.', array(), 'articles'); camp_html_display_error($errorStr, null, true); } } else { $themePath = $outputIssueSettings->getThemePath()->getPath(); } if ($outputSectionSettings instanceof OutputSettingsSection) { $articlePage = $outputSectionSettings->getArticlePage(); } else { $articlePage = $outputIssueSettings->getArticlePage(); } if (is_null($articlePage)) { foreach ($publicationThemes as $publicationTheme) { if ($publicationTheme->getPath() == $themePath) { $themeOutSettings = $themeManagementService->findOutputSetting($publicationTheme, $outputService->findByName('Web')); $articlePage = $themeOutSettings->getArticlePage(); } } } $templateId = $articlePage->getPath(); $templateName = substr($templateId, strlen($themePath)); if (!$templateId) { $errorStr = $translator->trans('This article cannot be previewed. Please make sure it has the article template selected.', array(), 'articles'); camp_html_display_error($errorStr, null, true); } if (!isset($_SERVER['SERVER_PORT'])) { $_SERVER['SERVER_PORT'] = 80; } $scheme = '//'; $siteAlias = new Alias($publicationObj->getDefaultAliasId()); $websiteURL = $scheme.$siteAlias->getName() . $GLOBALS['Campsite']['SUBDIR']; $accessParams = "LoginUserId=" . $g_user->getUserId() . "&AdminAccess=all"; if ($publicationObj->getUrlTypeId() == 1) { $url = "$websiteURL/tpl/$templateName?IdLanguage=$f_language_id" . "&IdPublication=$f_publication_id&NrIssue=$f_issue_number&NrSection=$f_section_number" . "&NrArticle=$f_article_number&$accessParams"; } else { $url = ShortURL::GetURL($f_publication_id, $f_language_selected, null, null, $f_article_number); if (!is_string($url) && PEAR::isError($url)) { $errorStr = $url->getMessage(); } $url .= '?' . $accessParams; $url = preg_replace('@^https?://@i', $scheme, $url); } $selectedLanguage = (int)CampRequest::GetVar('f_language_selected'); $url .= "&previewLang=$selectedLanguage"; $siteTitle = (!empty($Campsite['site']['title'])) ? htmlspecialchars($Campsite['site']['title']) : $translator->trans("Newscoop", array(), 'articles') . $Campsite['VERSION']; ?> <?php p($siteTitle); ?> hasPermission("ManageTempl") || $g_user->hasPermission("DeleteTempl")) { // Show dual-pane view for those with template management priviledges ?> " name="body" frameborder="1"> " name="body" frameborder="1"> ================================================ FILE: newscoop/admin-files/articles/translate.php ================================================ getService('translator'); // Optional input parameters $f_publication_id = Input::Get('f_publication_id', 'int', 0, true); $f_issue_number = Input::Get('f_issue_number', 'int', 0, true); $f_section_number = Input::Get('f_section_number', 'int', 0, true); $f_language_id = Input::Get('f_language_id', 'int', 0, true); $f_article_code = Input::Get('f_article_code', 'string', 0); $BackLink = Input::Get('Back', 'string', "/$ADMIN/articles/?f_publication_id=$f_publication_id&f_issue_number=$f_issue_number&f_section_number=$f_section_number&f_language_id=$f_language_id", true); list($articleNumber, $languageId) = explode("_", $f_article_code); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $BackLink); exit; } $articleObj = new Article($languageId, $articleNumber); if (!$articleObj->exists()) { camp_html_display_error($translator->trans('Article does not exist.'), $BackLink); exit; } $f_publication_id = ($f_publication_id > 0) ? $f_publication_id : $articleObj->getPublicationId(); $f_issue_number = ($f_issue_number > 0) ? $f_issue_number : $articleObj->getIssueNumber(); $f_section_number = ($f_section_number > 0) ? $f_section_number : $articleObj->getSectionNumber(); if ($f_publication_id > 0) { $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.'), $BackLink); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('No such issue.'), $BackLink); exit; } $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('No such section.'), $BackLink); exit; } } if (!$g_user->hasPermission("TranslateArticle")) { $errorStr = $translator->trans('You do not have the right to translate articles.', array(), 'articles'); camp_html_display_error($errorStr, $BackLink); exit; } // When the user selects a language the form is submitted to the same page (translation.php). // Read article translation form input values for the case when the page has been reloaded // because of language select. $f_translation_title = Input::Get('f_translation_title', 'string', '', true); $f_language_selected = Input::Get('f_translation_language', 'int', 0, true); $f_translation_language = Input::Get('f_translation_language', 'int', 0, true); if ($f_publication_id > 0) { $f_translation_issue_name = Input::Get('f_issue_name', 'string', $issueObj->getName(), true); $f_translation_issue_urlname = Input::Get('f_issue_urlname', 'string', $issueObj->getUrlName(), true); $f_translation_section_name = Input::Get('f_section_name', 'string', $sectionObj->getName(), true); $f_translation_section_urlname = Input::Get('f_section_urlname', 'string', $sectionObj->getUrlName(), true); } $allLanguages = Language::GetLanguages(null, null, null, array(), array(array('field'=>'byname', 'dir'=>'asc')), true); $articleLanguages = $articleObj->getLanguages(); $articleLanguages = DbObjectArray::GetColumn($articleLanguages, "Id"); if ( ($f_language_selected > 0) && ($f_issue_number > 0) ) { $translationIssueObj = new Issue($f_publication_id, $f_language_selected, $f_issue_number); $translationSectionObj = new Section($f_publication_id, $f_issue_number, $f_language_selected, $f_section_number); } if ($f_publication_id > 0) { $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj, 'Article'=>$articleObj); camp_html_content_top($translator->trans('Translate article', array(), 'articles'), $topArray, true, true); } else { $crumbs = array(); $crumbs[] = array($translator->trans("Actions"), ""); $crumbs[] = array($translator->trans('Translate article', array(), 'articles'), ""); echo camp_html_breadcrumbs($crumbs); } ?> 0) { ?>
    /left_arrow.png" BORDER="0"> ">trans("Article List", array(), 'articles'); ?> 0) { ?>style="padding-left: 20px;">/left_arrow.png" BORDER="0"> ">trans("Back to Edit Article"); ?>

    0) { ?> 0) && ($f_issue_number > 0) ) { // Every article must live inside a cooresponding issue of the same language. if (!$translationIssueObj->exists()) { if ($g_user->hasPermission("ManageIssue")) { // If a section needs to be translated, but the user doesnt have the permission // to create a section, then we dont want to display anything here. Even // if they can create the issue, they still need to create a cooresponding section. // If they dont have the permission to do that, then no use in creating the issue. if ($translationSectionObj->exists() || $g_user->hasPermission("ManageSection")) { ?> exists()) { if ($g_user->hasPermission("ManageSection")) { // If an issue needs to be translated, but the user doesnt have the permission // to create an issue, then we dont want to display anything here. Even // if they can create the section, they still need to create a cooresponding issue. if ($translationIssueObj->exists() || $g_user->hasPermission("ManageIssue")) { ?>
    trans("Translate article", array(), 'articles'); ?>
    trans("Article name ($1)", array('$1' => $articleObj->getLanguageName()), 'articles'); ?>: getTitle())); ?>
    trans("New article name", array(), 'articles'); ?>:
    trans("Language"); ?>:
    trans("An issue must be created for the selected language. Please enter the issue name and URL name.", array(), 'articles'); ?>
    trans("New issue name", array(), 'articles'); ?>:
    trans("New issue URL name", array(), 'articles'); ?>:
    trans('An issue must be created for the selected language but you do not have the right to create an issue.', array(), 'articles'); ?>
    trans("A section must be created for the selected language. Please enter the section name and URL name.", array(), 'articles'); ?>
    trans("New section name", array(), 'articles'); ?>:
    trans("New section URL name", array(), 'articles'); ?>:
    trans('A section must be created for the selected language but you do not have the right to create a section.', array(), 'articles'); ?>

    ================================================ FILE: newscoop/admin-files/backup.php ================================================ getService('translator'); require_once(CS_PATH_SITE.DIR_SEP . 'scripts' . DIR_SEP . 'file_processing.php'); // check permission if (!$g_user->hasPermission('ManageBackup')) { camp_html_display_error($translator->trans("You do not have the right to manage backups.", array(), 'home')); exit; } // make backup list and define file name based on index $files = getBackupList(); $fileIndex = Input::Get('index', 'integer', 0); if (!empty($files[$fileIndex]['name'])) { $file = CS_PATH_SITE . DIR_SEP . 'backup' . DIR_SEP . $files[$fileIndex]['name']; } else { $file = null; } // main controller $action = Input::Get('action', 'string', null); switch ($action) { case 'backup': set_time_limit(0); ob_end_flush(); flush(); echo str_repeat(' ', 2048); echo '

    ';
            $options = array('--default-dir', '--keep-session');
            include CS_PATH_SITE.DIR_SEP . 'bin' . DIR_SEP . 'newscoop-backup';
            echo '
    '; echo '
    '.$translator->trans('Close').'
    '; exit(0); case 'delete': if (!is_readable($file)) { camp_html_goto_page("/$ADMIN/backup.php"); } $do = unlink($file); if($do === true) { camp_html_add_msg($translator->trans('The file $1 was deleted successfully.', array('$1' => basename($file)), 'home'), 'ok'); } else { camp_html_add_msg($translator->trans('There was an error trying to delete the file $1.', array('$1' => basename($file)), 'home')); } camp_html_goto_page("/$ADMIN/backup.php"); break; case 'restore': if (!is_readable($file)) { camp_html_goto_page("/$ADMIN/backup.php"); } set_time_limit(0); ob_end_flush(); flush(); echo str_repeat(' ', 2048); echo '
    ';
            $options = array(
                'f' => true,
                'e' => true,
                'b' => $file,
                '--keep-session'
            );
            include CS_PATH_SITE.DIR_SEP . 'bin' . DIR_SEP . 'newscoop-restore';
            echo '
    '; echo '
    '.$translator->trans('Close').'
    '; exit(0); case 'download': if (!is_readable($file)) { camp_html_goto_page("/$ADMIN/backup.php"); } header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Length: ' . filesize($file)); header('Content-Type: application/x-gzip'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Transfer-Encoding: binary'); set_time_limit(0); // it looks that a problem could happen here if the server is out of its disk space try { $fp = fopen($file, 'r'); while (!feof($fp)) { print(fread($fp, 8192)); flush(); ob_flush(); } fclose($fp); } catch (Exception $exc) { echo $translator->trans('Download was not successful. Check please that the server is not out of disk space.', array(), 'home'); } exit(0); case 'upload': foreach ($_FILES as $file) { if (UPLOAD_ERR_OK != $file['error']) { $err_msg = camp_upload_errors($file['error']); camp_html_add_msg($translator->trans('Upload of file $1 was not successful.', array('$1' => $file['name']), 'home') . ' ' . $err_msg); continue; } if ($file['type'] == 'application/x-tar' || $file['type'] == 'application/x-gzip' || $file['type'] == 'application/gzip' || $file['type'] == 'application/x-compressed-tar') { // if not enough space, throws exception on the move attempt $move_failed = false; $move_dest = CS_PATH_SITE . DIR_SEP . 'backup' . DIR_SEP . $file['name']; try { move_uploaded_file($file['tmp_name'], $move_dest); camp_html_add_msg($translator->trans('The file $1 has been uploaded successfully.', array('$1' => $file['name']), 'home'), 'ok'); } catch (Exception $exc) { $move_failed = true; camp_html_add_msg($translator->trans('The file $1 could not be moved. Check you have enough of disk space.', array('$1' => $file['name']), 'home')); } // try to remove the (partially) moved file if the move was not successful if ($move_failed) { try { unlink($move_dest); } catch (Exception $exc) {} } } else { camp_html_add_msg($translator->trans("You have tried to upload an invalid backup file.", array(), 'home')); } } $files = getBackupList(); break; } // show breadcrumbs $crumbs = array(); $crumbs[] = array($translator->trans("Actions"), ""); $crumbs[] = array($translator->trans("Backup/Restore", array(), 'home'), ""); $breadcrumbs = camp_html_breadcrumbs($crumbs); echo $breadcrumbs; $controller->view->headTitle($translator->trans("Backup/Restore", array(), 'home').' - Newscoop Admin', 'SET'); // view template ?>
    trans("Free disk space", array(), 'home') . ': ' . ceil(disk_free_space($Campsite['CAMPSITE_DIR'])/1024/1024) . ' ' . $translator->trans('MiB', array(), 'home');?> /add.png" border="0"> trans("Make a new backup", array(), 'home')?> /tol.gif" border="0"> trans("Upload backup file", array(), 'home')?>

    $file) { if ($color) { $color = 0; $tr_class = "class=\"list_row_even\""; } else { $color = 1; $tr_class = "class=\"list_row_odd\""; } print ""; print ''; } } else { echo '' ; } ?>
    trans("File"); ?> trans("Creation date"); ?> trans("Size", array(), 'home') . ', ' . $translator->trans("Mb", array(), 'home'); ?> trans("Download", array(), 'home'); ?> trans("Restore", array(), 'home'); ?> trans("Delete"); ?>
    {$file['name']}{$file['time']}{$file['size']}'.$translator->trans('Download file', array(), 'home').''; ?> /help.png" border="0" alt="trans('Restore file', array(), 'home') ?>" title="trans('Restore file', array(), 'home') ?>"> '.$translator->trans('Delete file', array(), 'home').''; print '
    '.$translator->trans('Backup list is empty.', array(), 'home').'

    ================================================ FILE: newscoop/admin-files/bugreporter/bug_handler_main.php ================================================ setFile($p_file); $exception->setLine($p_line); throw $exception; }*/ // -- Return on generic errors --- if (preg_match ('/^Undefined index:/i', $p_string)){ return; } if (preg_match ('/^Undefined variable:/i', $p_string)){ return; } if (preg_match ('/^Undefined offset:/i', $p_string)){ return; } // -- SimpleXMLElement errors --- if (preg_match('/^SimpleXMLElement/i', $p_string)) { return; } // -- Return on URL parse errors if (preg_match('/^parse_url/i', $p_string)) { return; } // -- Return on mysql connect errors --- if (preg_match ('/^mysql_connect/i', $p_string)){ return; } // --- Return on socket errors --- if (preg_match ('/^fsockopen/i', $p_string)){ return; } // --- Return on unlink errors --- if (preg_match ('/^unlink/i', $p_string)){ return; } // --- Return on upload file errors --- if (preg_match ('/^move_uploaded_file/i', $p_string)){ return; } // -- Return on getimagesize errors -- if (preg_match ('/^getimagesize/i', $p_string)){ return; } // -- Return on imagecreate* errors -- if (preg_match ('/^imagecreate/i', $p_string)) { return; } // -- Return on rmdir errors -- if (preg_match ('/^rmdir/i', $p_string)){ return; } // -- Return on mkdir errors -- if (preg_match ('/^mkdir/i', $p_string)){ return; } // -- Return on fopen errors -- if (preg_match ('/^fopen/i', $p_string)){ return; } // -- Return on chown errors -- if (preg_match ('/^chown/i', $p_string)){ return; } // -- Return on chgrp errors -- if (preg_match ('/^chgrp/i', $p_string)){ return; } define('IN_BUG_HANDLE', TRUE); if (ob_get_length() !== false) { // --- Don't print out the previous screen (in which the error occurred). --- ob_end_clean(); } if (is_object($g_user)) { require_once($Campsite['HTML_DIR'] . "/$ADMIN_DIR/menu.php"); } // --- If reporter doesn't exist, make one ($reporter might exist // already if this script is an 'include') --- // Remove the code name from the version number. $version = explode(" ", $Campsite['VERSION']); $version = array_shift($version); if (!isset($reporter)) { $reporter = new BugReporter($p_number, $p_string, $p_file, $p_line, 'Newscoop', $version); } // --- Print results --- if (!function_exists('http_response_code')) { httpResponseCode(500); } else { http_response_code(500); } include dirname(__FILE__) . '/emailus.php'; exit(); } /** * http_response_code function is supported from PHP >= 5.4 * This function provide same functionality for PHP < 5.4 * * @param int|string $newCode Status code. * * @return int */ function httpResponseCode($newcode = null) { $code = 200; if ($newcode !== null) { header('X-PHP-Response-Code: '.$newcode, true, $newcode); if (!headers_sent()) { $code = $newcode; } } return $code; } ================================================ FILE: newscoop/admin-files/bugreporter/emailus.php ================================================ getService('translator'); global $ADMIN_DIR; global $Campsite; ?>
    "; echo $translator->trans("We are sorry, but there was a problem sending your bug report.", array(), 'bug_reporting'); echo ""; } else { echo ''; echo $translator->trans("Newscoop has encountered a problem.", array(), 'bug_reporting'); echo ""; echo '
    '; } ?>

    trans("Please take a minute to send us an email."); echo "

    "; echo $translator->trans("Simply copy and paste the error report below and send it to:", array(), 'bug_reporting'); echo(" "); echo $Campsite["SUPPORT_EMAIL"]; echo(""); ?>.

    trans("Thank you."); ?>


    trans("Error Report", array(), 'bug_reporting'); ?>

    trans("Email:"); ?> getEmail()); ?>
    trans("Description:", array(), 'bug_reporting'); ?> getDescription()); ?>
       
    trans("Error ID:", array(), 'bug_reporting'); ?> getId(); ?>
    PHP trans("Version", array(), 'messages'); ?>: getPHPVersion(); ?>
    OS: getServerOS(); ?>
    trans("Error String:", array(), 'bug_reporting'); ?> getStr(); ?>
    trans("Time:"); ?> getTime(); ?>
    trans("Backtrace:", array(), 'bug_reporting'); ?>
    getBacktraceString(); ?>
    
    ================================================ FILE: newscoop/admin-files/bugreporter/errormessage.php ================================================ getService('translator'); global $Campsite; global $ADMIN_DIR; global $ADMIN; ?>

    trans("Error Report", array(), 'bug_reporting'); ?>

    trans("Newscoop has encountered a problem.", array(), 'bug_reporting'); echo $translator->trans("We are sorry for the inconvenience.", array(), 'bug_reporting'); ?>

    trans("In order to help the Newscoop team investigate and pinpoint the issue please take a moment to describe what happened.", array(), 'bug_reporting'); ?>

     
    trans("What were you trying to do when this happened?", array(), 'bug_reporting'); ?> trans("(optional)"); ?>
     
    trans("Email:"); ?> trans("(optional)"); ?>
    ">
    ================================================ FILE: newscoop/admin-files/camp_html.php ================================================ $v) { $str .= " $k=\"$v\""; } $str .= '>'.htmlspecialchars($p_printValue)."\n"; echo $str; return $selected; } // fn camp_html_select_option /** * Display the copyright notice and close the HTML page. */ function camp_html_copyright_notice($p_displayBorder = true) { global $Campsite; $campVersion = new CampVersion(); if ($p_displayBorder) { ?> '; return $this; } /** * Process item * @param Article $article * @return array */ public function processItem($article) { global $g_user, $Campsite; $translator = \Zend_Registry::get('container')->getService('translator'); $editorService = \Zend_Registry::get('container')->getService('newscoop.editor'); $articleLink = $editorService->getLink($article); $articleLinkParams = $editorService->getLinkParameters($article); $articleLinkParamsTranslate = $articleLinkParams.'&f_action=translate&f_action_workflow='.$article->getWorkflowStatus() .'&f_article_code='.$article->getArticleNumber().'_'.$article->getLanguageId(); $previewLink = $Campsite['WEBSITE_URL'].'/admin/articles/preview.php'.$editorService->getLinkParameters($article); $htmlPreviewLink = ''.$translator->trans('Preview').''; $translateLink = $Campsite['WEBSITE_URL'].'/admin/articles/translate.php'.$articleLinkParamsTranslate; $htmlTranslateLink = ''.$translator->trans('Translate').''; $lockInfo = ''; $lockHighlight = false; $timeDiff = camp_time_diff_str($article->getLockTime()); if ($article->isLocked() && ($timeDiff['days'] <= 0)) { $lockUser = new User($article->getLockedByUser()); if ($timeDiff['hours'] > 0) { $lockInfo = $translator->trans('The article has been locked by $1 ($2) $3 hour(s) and $4 minute(s) ago.', array( '$1' => htmlspecialchars($lockUser->getRealName()), '$2' => htmlspecialchars($lockUser->getUserName()), '$3' => $timeDiff['hours'], '$4' => $timeDiff['minutes'], ), 'articles'); } else { $lockInfo = $translator->trans('The article has been locked by $1 ($2) $3 minute(s) ago.', array( '$1' => htmlspecialchars($lockUser->getRealName()), '$2' => htmlspecialchars($lockUser->getUserName()), '$3' => $timeDiff['minutes'], ), 'articles'); } if ($article->getLockedByUser() != $g_user->getUserId()) { $lockHighlight = true; } } $tmpUser = new User($article->getCreatorId()); $tmpArticleType = new ArticleType($article->getType()); $tmpAuthor = new Author(); $articleAuthors = ArticleAuthor::GetAuthorsByArticle($article->getArticleNumber(), $article->getLanguageId()); foreach ((array) $articleAuthors as $author) { if (strtolower($author->getAuthorType()->getName()) == 'author') { $tmpAuthor = $author; break; } } if (!$tmpAuthor->exists() && isset($articleAuthors[0])) { $tmpAuthor = $articleAuthors[0]; } $onFrontPage = $article->onFrontPage() ? $translator->trans('Yes') : $translator->trans('No'); $onSectionPage = $article->onSectionPage() ? $translator->trans('Yes') : $translator->trans('No'); $imagesNo = (int) ArticleImage::GetImagesByArticleNumber($article->getArticleNumber(), true); $topicsNo = (int) ArticleTopic::GetArticleTopics($article->getArticleNumber(), true); $commentsNo = ''; if ($article->commentsEnabled()) { global $controller; $repositoryComments = $controller->getHelper('entity')->getRepository('Newscoop\Entity\Comment'); $filter = array( 'thread' => $article->getArticleNumber(), 'language' => $article->getLanguageId()); $params = array( 'sFilter' => $filter); $commentsNo = $repositoryComments->getCount($params); } else { $commentsNo = 'No'; } // get language code $language = new Language($article->getLanguageId()); return array( $article->getArticleNumber(), $article->getLanguageId(), $article->getOrder(), sprintf('%s %s', $article->isLocked() ? '' : '', $articleLink, $translator->trans('Edit'), htmlspecialchars($article->getName()." ({$article->getLanguageName()})"), htmlspecialchars($article->getName().(empty($_REQUEST['language']) ? " ({$language->getCode()})" : ''))), // /sprintf htmlspecialchars($article->getSection()->getName()), $article->getWebcode(), htmlspecialchars($tmpArticleType->getDisplayName()), $tmpUser->getRealName() ? sprintf('%s %s', $tmpUser->getRealName(), $tmpUser->getLastName()). ' ('.$tmpUser->getUserName().')' : $translator->trans('N/A'), htmlspecialchars($tmpAuthor->getName()), $article->getWorkflowStatus(), $onFrontPage, $onSectionPage, $imagesNo, $topicsNo, $commentsNo, (int) $article->getReads(), Geo_Map::GetArticleMapId($article) != null ? $translator->trans('Yes') : $translator->trans('No'), (int) sizeof(Geo_Map::GetLocationsByArticle($article)), $article->getCreationDate(), $article->getPublishDate(), $article->getLastModified(), $htmlPreviewLink, $htmlTranslateLink, ); } /** * Handle data */ public function doData() { global $ADMIN_DIR, $g_user; foreach ($_REQUEST['args'] as $arg) { $_REQUEST[$arg['name']] = $arg['value']; } return require_once dirname(__FILE__).'/do_data.php'; } public function getFilterIssues() { global $ADMIN_DIR, $g_user; require_once $GLOBALS['g_campsiteDir'].'/classes/Publication.php'; require_once $GLOBALS['g_campsiteDir'].'/classes/Issue.php'; require_once $GLOBALS['g_campsiteDir'].'/classes/Section.php'; require_once $GLOBALS['g_campsiteDir'].'/classes/Author.php'; $translator = \Zend_Registry::get('container')->getService('translator'); foreach ($_REQUEST['args'] as $arg) { $_REQUEST[$arg['name']] = $arg['value']; } if ($_REQUEST['publication'] > 0) { $publication = $_REQUEST['publication']; } else { $publication = null; } if ($_REQUEST['language'] > 0) { $language = $_REQUEST['language']; } else { $language = null; } $newIssues = array(); $issues = Issue::GetIssues($publication, $language); $issuesNo = is_array($issues) ? sizeof($issues) : 0; $menuIssueTitle = $issuesNo > 0 ? $translator->trans('All Issues', array(), 'library') : $translator->trans('No issues found', array(), 'library'); foreach ($issues as $issue) { $newIssues[] = array('val' => $issue->getPublicationId().'_'.$issue->getIssueNumber().'_'.$issue->getLanguageId() , 'name' => $issue->getName()); } $returns = array(); $returns['items'] = $newIssues; $returns['itemsNo'] = $issuesNo; $returns['menuItemTitle'] = $menuIssueTitle; return json_encode($returns); } public function getFilterSections() { $translator = \Zend_Registry::get('container')->getService('translator'); global $ADMIN_DIR, $g_user; require_once $GLOBALS['g_campsiteDir'].'/classes/Publication.php'; require_once $GLOBALS['g_campsiteDir'].'/classes/Issue.php'; require_once $GLOBALS['g_campsiteDir'].'/classes/Section.php'; require_once $GLOBALS['g_campsiteDir'].'/classes/Author.php'; foreach ($_REQUEST['args'] as $arg) { $_REQUEST[$arg['name']] = $arg['value']; } if ($_REQUEST['publication'] > 0) { $publication = $_REQUEST['publication']; } else { $publication = null; } $language = null; if ($_REQUEST['issue'] > 0) { $issueArray = explode("_", $_REQUEST['issue']); $issue = $issueArray[1]; if (isset($issueArray[2])) { $language = $issueArray[2]; } } else { $issue = null; } if ($_REQUEST['language'] > 0) { $language = $_REQUEST['language']; } // get sections $sections = array(); $section_objects = Section::GetSections($publication, $issue, $language); foreach ($section_objects as $section) { if (!isset($sections[$section->getSectionNumber()])) { $sections[$section->getSectionNumber()] = $section; } } $newSections = array(); foreach ($sections as $section) { $newSections[] = array('val' => $section->getPublicationId().'_'.$section->getIssueNumber().'_'.$section->getLanguageId().'_'.$section->getSectionNumber(), 'name' => $section->getName()); } $sectionsNo = is_array($newSections) ? sizeof($newSections) : 0; $menuSectionTitle = $sectionsNo > 0 ? $translator->trans('All Sections', array(), 'library') : $translator->trans('No sections found', array(), 'library'); $returns = array(); $returns['items'] = $newSections; $returns['itemsNo'] = $sectionsNo; $returns['menuItemTitle'] = $menuSectionTitle; return json_encode($returns); } /** * Handle action * @param string $f_action * @param array $f_items * @param array $f_params * @return void */ public static function doAction($f_action, $f_items, $f_params = array()) { global $ADMIN_DIR, $g_user, $Campsite, $ADMIN; // this is used for some actions, but some do not have it defined at all if (empty($f_target)) { $f_target = ''; } return require_once dirname(__FILE__).'/do_action.php'; } /** * Handle order * @param array $f_order * @param int $f_language * @return void */ public static function doOrder($f_order, $f_language) { global $ADMIN_DIR; return require_once dirname(__FILE__).'/do_order.php'; } /** * Get column keys * * @return array */ public function getColumnKeys() { return array_keys($this->cols); } } ================================================ FILE: newscoop/admin-files/libs/ArticleList/actions.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ ?>
    getService('translator'); ?>
    trans('Select action', array(), 'library'); ?>
    ================================================ FILE: newscoop/admin-files/libs/ArticleList/do_action.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ $f_language_selected = (int) camp_session_get('f_language_selected', 0); require_once $GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/articles/article_common.php"; $translator = \Zend_Registry::get('container')->getService('translator'); $success = false; $message = $translator->trans('Access denied.', array(), 'library'); // default error $hiperlink = ''; $affectedArticles = 0; $notAffectedArticles = 0;; $message = ''; $errorMessage = ''; $articleCodes = array(); $flatArticleCodes = array(); $groupedArticleCodes = array(); foreach ($f_items as $articleCode) { list($articleId, $languageId) = explode('_', $articleCode); $articleCodes[] = array("article_id" => $articleId, "language_id" => $languageId); $flatArticleCodes[] = $articleId . '_' . $languageId; $groupedArticleCodes[$articleId][$languageId] = $languageId; } function prepareContextBoxItems($f_params) { GLOBAL $f_language_selected; $myItems = array(); $return = array(); if (array_key_exists('relatedArticles', $f_params)) { $f_items = $f_params['relatedArticles']; } else { $f_items = array(); } $f_article_id = $f_params['articleId']; $splitItems = explode('&', $f_items); foreach ($splitItems as $splitItem) { $labelId = explode('=', $splitItem); if (count($labelId) > 1) { $myItems[] = $labelId[1]; } } $f_items = $myItems; $return['f_related_items'] = $myItems; $return['f_article_id'] = $f_article_id; return $return; } function buildMessage($status, $no, $message) { $messageArray = array(); $messageArray['status'] = $status; $messageArray['no'] = $no; $messageArray['textMessage'] = $message; return $messageArray; } function returnJson($affectedNo, $message, $notAffectedNo, $errorMessage, $hiperlink) { $returnJson = array(); $returnJson['hiperlink'] = $hiperlink; $returnJson['messages'][] = buildMessage('affected', $affectedNo, $message); $returnJson['messages'][] = buildMessage('notAffected', $notAffectedNo, $errorMessage); return json_encode($returnJson); } switch ($f_action) { case 'delete': if (!$g_user->hasPermission('DeleteArticle')) { $success = false; $data->error = $translator->trans('You do not have the right to delete articles.', array(), 'library'); break; } $affectedArticles = 0; $notAffectedArticles = 0; foreach ($articleCodes as $articleCode) { $article = new Article($articleCode['language_id'], $articleCode['article_id']); $creatorId = $article->getCreatorId(); if ($article->delete()) { \Zend_Registry::get('container')->getService('dispatcher') ->dispatch('user.set_points', new \Newscoop\EventDispatcher\Events\GenericEvent(null, array('user' => $creatorId))); $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 articles have been removed", array('$1' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 articles have not been removed", array('$1' => $notAffectedArticles), 'library'); break; case "workflow_publish": if (!$g_user->hasPermission('Publish')) { $success = false; $data->error = $translator->trans('You do not have the right to change this article status. Once submitted an article can only be changed by authorized users.', array(), 'library'); break; } foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->setWorkflowStatus('Y')) { $articleObj->setProperty('time_updated', 'NOW()', true, true); $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } $message = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("Published"), '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("Article status not set to $1 for $2 articles", array('$1' => $translator->trans("Published"), '$2' => $notAffectedArticles), 'library'); break; case 'workflow_submit': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($g_user->hasPermission("Publish") || $articleObj->userCanModify($g_user)) { if ($articleObj->setWorkflowStatus('S')) { $articleObj->setProperty('time_updated', 'NOW()', true, true); $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("Submitted"), '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("Article status not set to $1 for $2 articles", array('$1' => $translator->trans("Submitted"), '$2' => $notAffectedArticles), 'library'); break; case 'workflow_new': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($g_user->hasPermission("Publish") || ($g_user->hasPermission('ChangeArticle') && ($articleObj->getWorkflowStatus() == 'S'))) { if ($articleObj->setWorkflowStatus('N')) { $articleObj->setProperty('time_updated', 'NOW()', true, true); $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("New"), '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("New"), '$2' => $affectedArticles), 'library'); break; case 'switch_onfrontpage': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { if ($articleObj->setOnFrontPage(!$articleObj->onFrontPage())) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 toggled for $2 articles.", array('$1' => """.$translator->trans("On Front Page").""", '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 not toggled for $2 articles.", array('$1' => """.$translator->trans("On Front Page").""", '$2' => $notAffectedArticles), 'library'); break; case 'switch_onsectionpage': $affectedArticles = 0; $notAffectedArticles = 0; foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { if ($articleObj->setOnSectionPage(!$articleObj->onSectionPage())) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 toggled for $2 articles.", array('$1' => """.$translator->trans("On Section Page").""", '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 not toggled for $2 articles.", array('$1' => """.$translator->trans("On Section Page").""", '$2' => $notAffectedArticles), 'library'); break; case 'switch_comments': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { if ($articleObj->setCommentsEnabled(!$articleObj->commentsEnabled())) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 toggled for $2 articles.", array('$1' => """.$translator->trans("Comments").""", '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 not toggled for $2 articles.", array('$1' => """.$translator->trans("Comments").""", '$2' => $notAffectedArticles), 'library'); break; case 'unlock': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { $articleObj->setIsLocked(false); $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 Article(s) unlocked", array('$1' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 Article(s) not unlocked", array('$1' => $notAffectedArticles), 'library'); break; case 'duplicate': foreach ($groupedArticleCodes as $articleNumber => $languageArray) { $languageId = camp_array_peek($languageArray); $articleObj = new Article($languageId, $articleNumber); $articleObj->copy($articleObj->getPublicationId(), $articleObj->getIssueNumber(), $articleObj->getSectionNumber(), $g_user->getUserId(), $languageArray); $success = true; $affectedArticles += 1; } $message = $translator->trans("$1 Article(s) duplicated", array('$1' => $affectedArticles), 'library'); break; case 'duplicate_interactive': case 'move': $args = array_merge($_REQUEST, $f_params); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= '&f_mode=multi&f_action='; $argsStr .= $f_action == 'move' ? 'move' : 'duplicate'; $argsStr .= '&f_language_selected=' . ( (int) camp_session_get('f_language_selected', 0)); foreach ($flatArticleCodes as $articleCode) { $argsStr .= '&f_article_code[]=' . $articleCode; } return returnJson(0, '', 0, '', $Campsite['WEBSITE_URL'] . "/admin/articles/duplicate.php?".$argsStr); break; case 'publish_schedule': $args = array_merge($_REQUEST, $f_params); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= '&f_language_selected=' . ( (int) camp_session_get('f_language_selected', 0)); foreach ($flatArticleCodes as $articleCode) { $argsStr .= '&f_article_code[]=' . $articleCode; } return returnJson(0, '', 0, '', $Campsite['WEBSITE_URL'] . "/admin/articles/multi_autopublish.php?".$argsStr); break; case 'context_box_update': $contextContent = prepareContextBoxItems($f_params); $articleObj = new Article($f_language_selected, $contextContent['f_article_id']); if ($articleObj->userCanModify($g_user)) { $contextBoxObj = new ContextBox(null, $contextContent['f_article_id']); $contextId = $contextBoxObj->getId(); $relatedItems = array_filter($contextContent['f_related_items'], 'is_numeric'); ContextBoxArticle::saveList($contextId, $relatedItems); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('boxarticles'); } return json_encode(array(200)); break; case 'context_box_preview_article': $return = array(); foreach ($_REQUEST['args'] as $arg) { if ( is_array($arg) && isset($arg['langId'])) { $f_language_selected = $arg['langId']; } } $articleId = $f_params['articleId']; if (!is_numeric($articleId)) { $articleIdArray = explode('_', $articleId); $articleId = $articleIdArray[1]; } $articleObj = new Article($f_language_selected, $articleId); $articleInfo = array(); $articleData = $articleObj->getArticleData(); // Get article type fields. $dbColumns = $articleData->getUserDefinedColumns(false, true); foreach ($dbColumns as $dbColumn) { if (htmlspecialchars($dbColumn->getDisplayName(0)) == 'full_text') { if ($dbColumn->getType() == ArticleTypeField::TYPE_SWITCH) { $value = $articleData->getProperty($dbColumn->getName()) ? $translator->trans('On', array(), 'library') : $translator->trans('Off', array(), 'library'); $return['body'] = $value; } else { $return['body'] = $articleData->getProperty($dbColumn->getName()); } } } $return['title'] = $articleObj->getTitle(); $return['articleId'] = $articleId; $return['date'] = $articleObj->getCreationDate(); if (!array_key_exists('body', $return)) { $return['date'] = $articleObj->getCreationDate(); } $return['code'] = 200; return $return; break; case 'context_box_load_list': $return = array(); $items = array(); $articleId = $f_params['articleId']; if (!is_numeric($articleId)) { $articleIdArray = explode('_', $articleId); $articleId = $articleIdArray[1]; } $contextBoxObj = new ContextBox(null, $articleId); $contextId = $contextBoxObj->getId(); $contextArticleIds = $contextBoxObj->getArticlesList(); foreach ($contextArticleIds as $contextArticleId) { $articleObj = new Article($f_language_selected, $contextArticleId); $item['title'] = $articleObj->getTitle(); $item['articleId'] = 'article_'.$contextArticleId; $item['date'] = $articleObj->getCreationDate(); $item['status'] = $articleObj->getWorkflowDisplayString(); $items[] = $item; } $return['items'] = $items; $return['code'] = 200; return $return; break; } if ($f_target == 'art_ofp') { $value = ($f_value == 'Yes') ? true : false; $success = $articleObj->setOnFrontPage($value); $message = $translator->trans("$1 toggled.", array('$1' => """.$translator->trans("On Front Page")."""), 'library'); } if ($f_target == 'art_osp') { $value = ($f_value == 'Yes') ? true : false; $success = $articleObj->setOnSectionPage($value); $message = $translator->trans("$1 toggled.", array('$1' => """.$translator->trans("On Section Page")."""), 'library'); } if ($f_target == 'art_status') { if (in_array($f_value, array('Published', 'Submitted', 'New'))) { switch ($f_value) { case 'New': $f_value = 'N'; break; case 'Published': $f_value = 'Y'; break; case 'Submitted': $f_value = 'S'; break; } $access = false; // A publisher can change the status in any way he sees fit. // Someone who can change an article can submit/unsubmit articles. // A user who owns the article may submit it. if ($g_user->hasPermission('Publish') || ($g_user->hasPermission('ChangeArticle') && ($f_value != 'Y')) || ($articleObj->userCanModify($g_user) && ($f_value == 'S') )) { $access = true; } // If the article is not yet categorized, force it to be before publication. if (($f_action_workflow == "Y") && (($articleObj->getPublicationId() == 0) || ($articleObj->getIssueNumber() == 0) || ($articleObj->getSectionNumber() == 0))) { //$args = $_REQUEST; //$argsStr = camp_implode_keys_and_values($_REQUEST, "=", "&"); //$argsStr .= "&f_article_code[]=".$f_article_number."_".$f_language_selected; //$argsStr .= "&f_mode=single&f_action=publish"; //camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr); } $success = $articleObj->setWorkflowStatus($f_value); $message = $translator->trans("Article status set to $1", array('$1' => $articleObj->getWorkflowDisplayString($f_value)), 'library'); } } if ($affectedArticles == 0 && $success) { $affectedArticles = 1; } return returnJson($affectedArticles, $message, $notAffectedArticles, $errorMessage, $hiperlink); ================================================ FILE: newscoop/admin-files/libs/ArticleList/do_data.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once dirname(__FILE__) . '/ArticleList.php'; require_once WWW_DIR . '/classes/Article.php'; require_once($GLOBALS['g_campsiteDir'].'/classes/ArticleType.php'); $list = new ArticleList(TRUE); // start >= 0 $start = max(0, empty($_REQUEST['iDisplayStart']) ? 0 : (int) $_REQUEST['iDisplayStart']); // results num >= 10 && <= 100 $limit = min(100, max(10, empty($_REQUEST['iDisplayLength']) ? 0 : (int) $_REQUEST['iDisplayLength'])); // filters - common $articlesParams = array(); $filters = array( 'publication' => array('is', 'integer'), 'issue' => array('is', 'integer'), 'section' => array('is', 'integer'), 'language' => array('is', 'integer'), 'publish_date' => array('is', 'date'), 'publish_date_from' => array('greater_equal', 'date'), 'publish_date_to' => array('smaller_equal', 'date'), 'author' => array('is', 'integer'), 'topic' => array('is', 'integer'), 'workflow_status' => array('is', 'string'), 'creator' => array('is', 'integer'), 'type' => array('is', 'string'), ); // mapping form name => db name $fields = array( 'publish_date_from' => 'publish_date', 'publish_date_to' => 'publish_date', 'language' => 'idlanguage', 'creator' => 'iduser', ); //fix for the new issue filters if( isset($_REQUEST['issue']) && $_REQUEST['issue'] > 0 ) { if($_REQUEST['issue'] != 0) { $issueFiltersArray = explode('_', $_REQUEST['issue']); if(count($issueFiltersArray) > 1) { if (empty($_REQUEST['publication'])) { $_REQUEST['publication'] = $issueFiltersArray[0]; } $_REQUEST['issue'] = $issueFiltersArray[1]; $_REQUEST['language'] = $issueFiltersArray[2]; } } } //fix for the new section filters if( isset($_REQUEST['section']) && $_REQUEST['section'] > 0 ) { if($_REQUEST['section'] != 0) { $sectionFiltersArray = explode('_', $_REQUEST['section']); if(count($sectionFiltersArray) > 1) { if (empty($_REQUEST['publication'])) { $_REQUEST['publication'] = $sectionFiltersArray[0]; } if (empty($_REQUEST['language'])) { $_REQUEST['language'] = $sectionFiltersArray[2]; } $_REQUEST['section'] = $sectionFiltersArray[3]; } } } foreach ($filters as $name => $opts) { if (isset($_REQUEST[$name]) && (!empty($_REQUEST[$name]) || $_REQUEST[$name] === 0)) { $field = !empty($fields[$name]) ? $fields[$name] : $name; $articlesParams[] = new ComparisonOperation($field, new Operator($opts[0], $opts[1]), $_REQUEST[$name]); } } if (empty($_REQUEST['showtype']) || $_REQUEST['showtype'] != 'with_filtered') { // limit articles of filtered types by default foreach((array) \ArticleType::GetArticleTypes(true) as $one_art_type_name) { $one_art_type = new \ArticleType($one_art_type_name); if ($one_art_type->getFilterStatus()) { $articlesParams[] = new ComparisonOperation('type', new Operator('not', 'string'), $one_art_type->getTypeName()); } } } // search if (isset($_REQUEST['sSearch']) && strlen($_REQUEST['sSearch']) > 0) { $search_phrase = $_REQUEST['sSearch']; //$articlesParams[] = new ComparisonOperation('search_phrase', new Operator('is', 'integer'), $search_phrase); $articlesParams[] = new ComparisonOperation('search_phrase', new Operator('like', 'string'), "__match_all.".$search_phrase); } // sorting $cols = $list->getColumnKeys(); $sortOptions = array( 'Number' => 'bynumber', 'Order' => 'bysectionorder', 'Name' => 'byname', 'Comments' => 'bycomments', 'Reads' => 'bypopularity', 'CreateDate' => 'bycreationdate', 'PublishDate' => 'bypublishdate', 'Author' => 'byauthor', 'Status' => 'bystatus' ); $sortBy = 'bysectionorder'; $sortDir = 'asc'; $sortingCols = min(1, (int) $_REQUEST['iSortingCols']); for ($i = 0; $i < $sortingCols; $i++) { $sortOptionsKey = (int) $_REQUEST['iSortCol_' . $i]; if (!empty($sortOptions[$cols[$sortOptionsKey]])) { $sortBy = $sortOptions[$cols[$sortOptionsKey]]; $sortDir = $_REQUEST['sSortDir_' . $i]; break; } } // get articles $articles = Article::GetList($articlesParams, array(array('field' => $sortBy, 'dir' => $sortDir)), $start, $limit, $articlesCount, true); $return = array(); foreach($articles as $article) { $return[] = $list->processItem($article); } return array( 'iTotalRecords' => Article::GetTotalCount(), 'iTotalDisplayRecords' => $articlesCount, 'sEcho' => (int) $_REQUEST['sEcho'], 'aaData' => $return, ); ================================================ FILE: newscoop/admin-files/libs/ArticleList/do_order.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/articles/article_common.php"); $article = new Article(); foreach ($f_order as $order => $item) { list($prefix, $articleId) = explode('_', $item); $article->Article($f_language, $articleId); $article->setProperty('ArticleOrder', $order + 1); } return TRUE; ================================================ FILE: newscoop/admin-files/libs/ArticleList/filters.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once $GLOBALS['g_campsiteDir'] . '/classes/Publication.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Issue.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Section.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Author.php'; $translator = \Zend_Registry::get('container')->getService('translator'); // get publications $publications = Publication::GetPublications(); $publicationsNo = is_array($publications) ? sizeof($publications) : 0; $menuPubTitle = $publicationsNo > 0 ? $translator->trans('All Publications', array(), 'library') : $translator->trans('No publications found', array(), 'library'); // get issues $issues = Issue::GetIssues($this->publication, NULL); $issuesNo = is_array($issues) ? sizeof($issues) : 0; $menuIssueTitle = $issuesNo > 0 ? $translator->trans('All Issues', array(), 'library') : $translator->trans('No issues found', array(), 'library'); // get sections $sections = array(); $section_objects = Section::GetSections($this->publication, $this->issue, $this->language); foreach ($section_objects as $section) { if (!isset($sections[$section->getSectionNumber()])) { $sections[$section->getSectionNumber()] = $section; } } $sectionsNo = is_array($sections) ? sizeof($sections) : 0; $menuSectionTitle = $sectionsNo > 0 ? $translator->trans('All Sections', array(), 'library') : $translator->trans('No sections found', array(), 'library'); ?>
    trans('Filter', array(), 'library'); ?>
    ================================================ FILE: newscoop/admin-files/libs/ArticleList/table.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ $translator = \Zend_Registry::get('container')->getService('translator'); ?>
    cols as $label) { ?> items === NULL) { ?> items)) { ?> items as $item) { ?>
    trans('Loading data', array(), 'library'); ?>
    order) { ?>
    ================================================ FILE: newscoop/admin-files/libs/BaseList/BaseList.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ /** * List component */ class BaseList { /** @var string */ protected $id = ''; /** @var string */ protected $web = ''; /** @var string */ protected $admin = ''; /** @var bool */ protected $search = FALSE; /** @var array */ protected $searchCols = array(); /** @var array */ protected $cols = array(); /** @var array */ protected $ignoredCols = array(); /** @var bool */ protected $colVis = FALSE; /** @var mixed */ protected $model = NULL; /** @var bool */ protected $order = FALSE; /** @var array */ protected $hidden = array(); /** @var string */ protected $defaultSorting = NULL; /** @var string */ protected $defaultSortingDir = 'asc'; /** @var array */ protected $notSortable = array(); /** @var array */ protected $items = NULL; /** @var bool */ protected $beforeRender = FALSE; /** @var bool */ protected static $renderTable = FALSE; /** @var int */ protected $inUseColumn = NULL; /** @var bool */ protected $clickable = TRUE; /** @var array */ protected $filters = array('1'); /** */ public function __construct() { global $Campsite, $ADMIN; // set paths $this->web = $Campsite['WEBSITE_URL']; $this->path = $this->web . '/admin/libs/ArticleList'; $this->id = substr(sha1(get_class($this)), -6); } /** * Get list id * @return string */ public function getId() { return (string) $this->id; } /** * Add sDom element * * @param string $id * @return void */ public function addSDom($id) { $this->sDoms = array($id); } /** * Get sDom property. * @return string */ public function getSDom() { $colvis = $this->colVis ? 'C' : ''; $search = $this->search ? 'f' : ''; $paging = $this->items === NULL ? 'ip' : 'i'; $custom = !empty($this->sDoms) ? '<"#' . $this->sDoms[0] . '">' : ''; return sprintf('<"H"%s%s%s%s>t<"F"%s%s>', $colvis, $custom, $search, $paging, $paging, $this->items === NULL ? 'l' : '' ); } /** * Get Context Box sDom property. * @return string */ public function getContextSDom() { $colvis = $this->colVis ? 'C' : ''; $search = $this->search ? 'f' : ''; $paging = $this->items === NULL ? 'ip' : 'i'; return sprintf('<"H"%s%s>t<"F"%s%s>', $colvis, $search, //$paging, $paging, $this->items === NULL ? 'l' : '' ); } /** * Get default sorting * @return string */ public function getSorting() { return json_encode(array( (int) $this->defaultSorting, $this->defaultSortingDir, )); } /** * Set search. * @param bool $search * @return ArticleList */ public function setSearch($search = FALSE) { $this->search = (bool) $search; return $this; } /** * Set links clickable * @param bool $clickable * @return BaseList */ public function setClickable($clickable = TRUE) { $this->clickable = $clickable; return $this; } /** * Set ColVis. * @param bool $colVis * @return ArticleList */ public function setColVis($colVis = FALSE) { $this->colVis = (bool) $colVis; return $this; } /** * Set order. * @param bool $order * @return ArticleList */ public function setOrder($order = FALSE) { $this->order = (bool) $order; return $this; } /** * Set column to be hidden. * @param int|string $key * @return ArticleList */ public function setHidden($key) { if (is_int($key)) { $this->hidden[] = (int) $key; } else { foreach(array_keys($this->cols) as $id => $val) { if ($key == $val) { $this->hidden[] = $id; break; } } } return $this; } /** * Set items. * @param array $items * @return ArticleList */ public function setItems($items) { if (isset($items[0]) && is_array($items[0])) { $items = $items[0]; } $this->items = array(); foreach ((array) $items as $item) { $this->items[] = $this->processItem($item); } return $this; } /** * Process item * @param mixed $item * @return mixed */ public function processItem($item) { return array_values($item); // to be overriden in subclasses } /** * Get function arguments * @return array */ final protected function getArgs() { $args = array(); foreach ($_POST['args'] as $arg) { $args[$arg['name']] = $arg['value']; } return $args; } /** * Get path for file - try in subclass folder, fallback in baseclass folder * @param string $filename * @return string|NULL */ final protected function getPath($filename) { $reflector = new ReflectionObject($this); $paths = array( dirname($reflector->getFileName()) . '/' . ((string) $filename), dirname(__FILE__) . '/' . ((string) $filename), ); foreach ($paths as $path) { if (file_exists($path)) { return $path; } } return NULL; } /** * Data provider * @return array */ public function doData() { global $g_ado_db; if (!isset($this->model)) { return array(); } // get args $aoData = $this->getArgs(); // order $dbCols = array_keys($this->cols); $order = array(); for ($i = 0; $i < (int) $aoData['iSortingCols']; $i++) { $order[] = sprintf('%s %s', $dbCols[$aoData["iSortCol_$i"]], $aoData["sSortDir_$i"]); } // select columns $cols = array_diff(array_keys($this->cols), $this->ignoredCols); $queryStr = 'SELECT ' . implode(', ', $cols) . ' FROM ' . $this->model->m_dbTableName; $queryStr .= ' WHERE ' . implode(' AND ', $this->filters); // set search if (!empty($aoData['sSearch'])) { $search = array(); foreach ($this->searchCols as $col) { $search[] = sprintf('%s LIKE "%%%s%%"', $col, $aoData['sSearch']); } $queryStr .= ' AND (' . implode(' OR ', $search) . ' ) '; } // get filtered count (before ordering and limiting) $totalDisplayRecords = $this->getCount($queryStr); // set order if (!empty($order)) { $queryStr .= ' ORDER BY ' . implode(', ', $order); } // add limit $queryStr .= sprintf(' LIMIT %s,%s', $aoData['iDisplayStart'], $aoData['iDisplayLength']); $items = array(); $rows = (array) $g_ado_db->GetAll($queryStr); foreach ($rows as $row) { $items[] = $this->processRow((array) $row); } return array( 'iTotalRecords' => $this->getCount(), 'iTotalDisplayRecords' => $totalDisplayRecords, 'sEcho' => (int) $aoData['sEcho'], 'aaData' => $items, ); } /** * Get db rows count * @param string $from * @return int */ public function getCount($from = NULL) { global $g_ado_db; $queryStr = 'SELECT COUNT(*) FROM ' . (isset($from) ? "($from) f" : $this->model->m_dbTableName); return (int) $g_ado_db->GetOne($queryStr); } /** * Process db row * @param array $row * @return array */ public function processRow(array $row) { return array_values($row); } /** * Renders list id * @return void */ public function beforeRender() { if (!$this->beforeRender) { echo '
    '; } $this->beforeRender = TRUE; } /** * Render table. * @return ArticleList */ public function render() { $this->beforeRender(); include $this->getPath('table.php'); self::$renderTable = TRUE; echo '
    '; return $this; } /** * Handle delete * @param array $ids * @return bool */ public function doDelete($ids) { $class = get_class($this->model); foreach ((array) $ids as $id) { $object = new $class($id); $object->delete(); } return TRUE; } /** * Handle approve * @param array $ids * @return bool */ public function doApprove($ids) { $class = get_class($this->model); foreach ((array) $ids as $id) { $object = new $class($id); $object->update(array('Status' => 'approved')); } return TRUE; } /** * Handle disapprove * @param array $ids * @return bool */ public function doDisapprove($ids) { $class = get_class($this->model); foreach ((array) $ids as $id) { $object = new $class($id); $object->update(array('Status' => 'unapproved')); } return TRUE; } /** * Get human readable filesize * @credits joaoptm [http://php.net/manual/en/function.filesize.php] * @param int $size * @return string */ public static function FormatFileSize($size) { static $units = array(' B', ' KB', ' MB', ' GB', ' TB'); $size = (int) $size; for ($i = 0; $size >= 1024 && $i < 4; $i++) { $size /= 1024; } return round($size, 2) . $units[$i]; } } ================================================ FILE: newscoop/admin-files/libs/BaseList/table.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ $translator = \Zend_Registry::get('container')->getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('preferences'); ?>
    cols as $title) { ?> items === NULL) { ?> items)) { ?> items as $item) { ?>
    trans('Loading data', array(), 'library'); ?>
    ================================================ FILE: newscoop/admin-files/libs/ContextList/ContextList.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once dirname(__FILE__) . '/../BaseList/BaseList.php'; require_once WWW_DIR . '/classes/GeoMap.php'; require_once WWW_DIR . '/classes/Article.php'; /** * Article list component */ class ContextList extends BaseList { /** @var int */ protected $publication = 0; /** @var int */ protected $issue = 0; /** @var int */ protected $section = null; /** @var int */ protected $language = null; /** @var array */ protected $filters = array(); /** @var array */ protected $orderBy = array(); /** @var bool */ protected static $renderFilters = FALSE; /** @var bool */ protected static $renderActions = FALSE; /** @var string */ protected static $lastId = NULL; /** * @param bool $randomId */ public function __construct($randomId = FALSE) { parent::__construct(); $translator = \Zend_Registry::get('container')->getService('translator'); // generate id - unique per page instance if (empty(self::$lastId)) { self::$lastId = __FILE__; if ($randomId) { self::$lastId = uniqid(); } } $this->id = substr(sha1(self::$lastId), -6); self::$lastId = $this->id; // column titles $this->cols = array( 'Number' => NULL, 'Language' => $translator->trans('Language'), 'Order' => $translator->trans('Order'), ); } /** * Set publication. * @param int $publication * @return ArticleList */ public function setPublication($publication) { $this->publication = empty($publication) ? NULL : (int) $publication; return $this; } /** * Set issue. * @param int $issue * @return ArticleList */ public function setIssue($issue) { $this->issue = empty($issue) ? NULL : (int) $issue; return $this; } /** * Set section. * @param int $section * @return ArticleList */ public function setSection($section) { $this->section = empty($section) ? NULL : (int) $section; return $this; } /** * Set language. * @param int $language * @return ArticleList */ public function setLanguage($language) { $this->language = empty($language) ? 1 : (int) $language; return $this; } /** * Set filter. * @param string $name * @param mixed $value * @return ArticleList */ public function setFilter($name, $value) { $this->filters[$name] = $value; return $this; } /** * Set column to order by. * * @param string $column * @param string $direction * @return ArticleList */ public function setOrderBy($column, $direction = 'asc') { if (!isset($this->cols[$column])) { return $this; } $columnNo = array_search($column, array_keys($this->cols)); $this->orderBy[$columnNo] = strtolower($direction) == 'desc' ? 'desc' : 'asc'; return $this; } /** * Render filters. * @return ArticleList */ public function renderFilters() { $this->beforeRender(); include dirname(__FILE__) . '/filters.php'; self::$renderFilters = TRUE; return $this; } /** * Render actions. * @return ArticleList */ public function renderActions() { $this->beforeRender(); include dirname(__FILE__) . '/actions.php'; self::$renderActions = TRUE; return $this; } /** * Render table. * @return ArticleList */ public function render() { $this->beforeRender(); include dirname(__FILE__) . '/table.php'; self::$renderTable = TRUE; echo ''; return $this; } /** * Process item * @param Article $article * @return array */ public function processItem($article) { global $g_user, $Campsite; $translator = \Zend_Registry::get('container')->getService('translator'); return array( $article->getArticleNumber(), $article->getLanguageId(), sprintf('
    %s (%s) (%s)
    %s
    %s
    ', $article->getLanguageId(), $article->getCreationDate(), $article->getWorkflowDisplayString(), $article->getType(), $translator->trans('View article', array(), 'library'), $article->getName()), ); } /** * Handle data * @param array $f_request */ public function doData($f_request = null) { global $ADMIN_DIR, $g_user; foreach ($_REQUEST['args'] as $arg) { $_REQUEST[$arg['name']] = $arg['value']; } return require_once dirname(__FILE__) . '/do_data.php'; } public function getFilterIssues() { global $ADMIN_DIR, $g_user; require_once $GLOBALS['g_campsiteDir'] . '/classes/Publication.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Issue.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Section.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Author.php'; $translator = \Zend_Registry::get('container')->getService('translator'); foreach ($_REQUEST['args'] as $arg) { $_REQUEST[$arg['name']] = $arg['value']; } if ($_REQUEST['publication'] > 0) { $publication = $_REQUEST['publication']; } else { $publication = NULL; } if ($_REQUEST['language'] > 0) { $language = $_REQUEST['language']; } else { $language = NULL; } $newIssues = array(); $issues = Issue::GetIssues($publication, $language); $issuesNo = is_array($issues) ? sizeof($issues) : 0; $menuIssueTitle = $issuesNo > 0 ? $translator->trans('All Issues', array(), 'library') : $translator->trans('No issues found', array(), 'library'); foreach ($issues as $issue) { $newIssues[] = array('val' => $issue->getPublicationId().'_'.$issue->getIssueNumber().'_'.$issue->getLanguageId() , 'name' => $issue->getName()); } $returns = array(); $returns['items'] = $newIssues; $returns['itemsNo'] = $issuesNo; $returns['menuItemTitle'] = $menuIssueTitle; return json_encode($returns); } public function getFilterSections() { global $ADMIN_DIR, $g_user; require_once $GLOBALS['g_campsiteDir'] . '/classes/Publication.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Issue.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Section.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Author.php'; $translator = \Zend_Registry::get('container')->getService('translator'); foreach ($_REQUEST['args'] as $arg) { $_REQUEST[$arg['name']] = $arg['value']; } if ($_REQUEST['publication'] > 0) { $publication = $_REQUEST['publication']; } else { $publication = NULL; } $language = NULL; if ($_REQUEST['issue'] > 0) { $issueArray = explode("_",$_REQUEST['issue']); $issue = $issueArray[1]; if (isset($issueArray[2])) { $language = $issueArray[2]; } } else { $issue = NULL; } if ($_REQUEST['language'] > 0) { $language = $_REQUEST['language']; } // get sections $sections = array(); $section_objects = Section::GetSections($publication, $issue, $language); foreach ($section_objects as $section) { if (!isset($sections[$section->getSectionNumber()])) { $sections[$section->getSectionNumber()] = $section; } } $newSections = array(); foreach ($sections as $section) { $newSections[] = array('val' => $section->getPublicationId().'_'.$section->getIssueNumber().'_'.$section->getLanguageId().'_'.$section->getSectionNumber(), 'name' => $section->getName()); } $sectionsNo = is_array($newSections) ? sizeof($newSections) : 0; $menuSectionTitle = $sectionsNo > 0 ? $translator->trans('All Sections', array(), 'library') : $translator->trans('No sections found', array(), 'library'); $returns = array(); $returns['items'] = $newSections; $returns['itemsNo'] = $sectionsNo; $returns['menuItemTitle'] = $menuSectionTitle; return json_encode($returns); } /** * Handle action * @param string $f_action * @param array $f_items * @param array $f_params * @return void */ public static function doAction($f_action, $f_items, $f_params = array()) { global $ADMIN_DIR, $g_user, $Campsite, $ADMIN; // this is used for some actions, but some do not have it defined at all if (empty($f_target)) { $f_target = ''; } return require_once dirname(__FILE__) . '/do_action.php'; } /** * Handle order * @param array $f_order * @param int $f_language * @return void */ public static function doOrder($f_order, $f_language) { global $ADMIN_DIR; return require_once dirname(__FILE__) . '/do_order.php'; } public function doPreview($f_language_id = 0, $_article_no = 0) { } } ================================================ FILE: newscoop/admin-files/libs/ContextList/actions.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ ?>
    getService('translator'); ?>
    trans('Select action', array(), 'library'); ?>
    ================================================ FILE: newscoop/admin-files/libs/ContextList/do_action.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once $GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/articles/article_common.php"; $translator = \Zend_Registry::get('container')->getService('translator'); $f_language_selected = (int) camp_session_get('f_language_selected', 0); $success = false; $message = $translator->trans('Access denied.', array(), 'library'); // default error $hiperlink = ''; $affectedArticles = 0; $notAffectedArticles = 0;; $message = ''; $errorMessage = ''; $articleCodes = array(); $flatArticleCodes = array(); $groupedArticleCodes = array(); foreach ($f_items as $articleCode) { list($articleId, $languageId) = explode('_', $articleCode); $articleCodes[] = array("article_id" => $articleId, "language_id" => $languageId); $flatArticleCodes[] = $articleId . '_' . $languageId; $groupedArticleCodes[$articleId][$languageId] = $languageId; } /* function returnJson($status = 'true', $message = 'Articles updated.', $hiperlink = '') { $returnJson = array(); $returnJson['status'] = $status; $returnJson['message'] = $message; $returnJson['hiperlink'] = $hiperlink; return json_encode($returnJson); } */ function buildMessage($status, $no, $message) { $messageArray = array(); $messageArray['status'] = $status; $messageArray['no'] = $no; $messageArray['textMessage'] = $message; return $messageArray; } function returnJson($affectedNo, $message, $notAffectedNo, $errorMessage, $hiperlink) { $returnJson = array(); $returnJson['hiperlink'] = $hiperlink; $returnJson['messages'][] = buildMessage('affected', $affectedNo, $message); $returnJson['messages'][] = buildMessage('notAffected', $notAffectedNo, $errorMessage); return json_encode($returnJson); } switch($f_action) { case 'delete': if (!$g_user->hasPermission('DeleteArticle')) { $success = false; $data->error = $translator->trans('You do not have the right to delete articles.', array(), 'library'); break; } $affectedArticles = 0; $notAffectedArticles = 0; foreach ($articleCodes as $articleCode) { $article = new Article($articleCode['language_id'], $articleCode['article_id']); if ($article->delete()) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 articles have been removed", array('$1' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 articles have not been removed", array('$1' => $notAffectedArticles), 'library'); break; case "workflow_publish": if (!$g_user->hasPermission('Publish')) { $success = false; $data->error = $translator->trans('You do not have the right to change this article status. Once submitted an article can only be changed by authorized users.', array(), 'library'); break; } foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->setWorkflowStatus('Y')) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } $message = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("Published"), '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("Article status not set to $1 for $2 articles", array('$1' => $translator->trans("Published"), '$2' => $notAffectedArticles), 'library'); break; case 'workflow_submit': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($g_user->hasPermission("Publish") || $articleObj->userCanModify($g_user)) { if ($articleObj->setWorkflowStatus('S')) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("Submitted"), '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("Article status not set to $1 for $2 articles", array('$1' => $translator->trans("Submitted"), '$2' => $notAffectedArticles), 'library'); break; case 'workflow_new': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($g_user->hasPermission("Publish") || ($g_user->hasPermission('ChangeArticle') && ($articleObj->getWorkflowStatus() == 'S'))) { if ($articleObj->setWorkflowStatus('N')) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("New"), '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("Article status set to $1 for $2 articles", array('$1' => $translator->trans("New"), '$2' => $affectedArticles), 'library'); break; case 'switch_onfrontpage': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { if ($articleObj->setOnFrontPage(!$articleObj->onFrontPage())) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 toggled for $2 articles.", array('$1' => """.$translator->trans("On Front Page").""", '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 not toggled for $2 articles.", array('$1' => """.$translator->trans("On Front Page").""", '$2' => $notAffectedArticles), 'library'); break; case 'switch_onsectionpage': $affectedArticles = 0; $notAffectedArticles = 0; foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { if ($articleObj->setOnSectionPage(!$articleObj->onSectionPage())) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 toggled for $2 articles.", array('$1' => """.$translator->trans("On Section Page").""", '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 not toggled for $2 articles.", array('$1' => """.$translator->trans("On Section Page").""", '$2' => $notAffectedArticles), 'library'); break; case 'switch_comments': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { if ($articleObj->setCommentsEnabled(!$articleObj->commentsEnabled())) { $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 toggled for $2 articles.", array('$1' => """.$translator->trans("Comments").""", '$2' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 not toggled for $2 articles.", array('$1' => """.$translator->trans("Comments").""", '$2' => $notAffectedArticles), 'library'); break; case 'unlock': foreach ($articleCodes as $articleCode) { $articleObj = new Article($articleCode['language_id'], $articleCode['article_id']); if ($articleObj->userCanModify($g_user)) { $articleObj->setIsLocked(false); $success = true; $affectedArticles += 1; } else { $notAffectedArticles += 1; } } $message = $translator->trans("$1 Article(s) unlocked", array('$1' => $affectedArticles), 'library'); $errorMessage = $translator->trans("$1 Article(s) not unlocked", array('$1' => $notAffectedArticles), 'library'); break; case 'duplicate': foreach ($groupedArticleCodes as $articleNumber => $languageArray) { $languageId = camp_array_peek($languageArray); $articleObj = new Article($languageId, $articleNumber); $articleObj->copy($articleObj->getPublicationId(), $articleObj->getIssueNumber(), $articleObj->getSectionNumber(), $g_user->getUserId(), $languageArray); $success = true; $affectedArticles += 1; } $message = $translator->trans("$1 Article(s) duplicated", array('$1' => $affectedArticles), 'library'); break; case 'duplicate_interactive': case 'move': $args = array_merge($_REQUEST, $f_params); unset($args["f_article_code"]); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= '&f_mode=multi&f_action='; $argsStr .= $f_action == 'move' ? 'move' : 'duplicate'; $argsStr .= '&f_language_selected=' . ( (int) camp_session_get('f_language_selected', 0)); foreach ($flatArticleCodes as $articleCode) { $argsStr .= '&f_article_code[]=' . $articleCode; } return returnJson(0, '', 0, '', $Campsite['WEBSITE_URL'] . "/admin/articles/duplicate.php?".$argsStr); break; case 'publish_schedule': $args = array_merge($_REQUEST, $f_params); $argsStr = camp_implode_keys_and_values($args, "=", "&"); $argsStr .= '&f_language_selected=' . ( (int) camp_session_get('f_language_selected', 0)); foreach ($flatArticleCodes as $articleCode) { $argsStr .= '&f_article_code[]=' . $articleCode; } return returnJson(0, '', 0, '', $Campsite['WEBSITE_URL'] . "/admin/articles/multi_autopublish.php?".$argsStr); break; } if ($f_target == 'art_ofp') { $value = ($f_value == 'Yes') ? true : false; $success = $articleObj->setOnFrontPage($value); $message = $translator->trans("$1 toggled.", array('$1' => """.$translator->trans("On Front Page")."""), 'library'); } if ($f_target == 'art_osp') { $value = ($f_value == 'Yes') ? true : false; $success = $articleObj->setOnSectionPage($value); $message = $translator->trans("$1 toggled.", array('$1' => """.$translator->trans("On Section Page")."""), 'library'); } if ($f_target == 'art_status') { if (in_array($f_value, array('Published', 'Submitted', 'New'))) { switch($f_value) { case 'New': $f_value = 'N'; break; case 'Published': $f_value = 'Y'; break; case 'Submitted': $f_value = 'S'; break; } $access = false; // A publisher can change the status in any way he sees fit. // Someone who can change an article can submit/unsubmit articles. // A user who owns the article may submit it. if ($g_user->hasPermission('Publish') || ($g_user->hasPermission('ChangeArticle') && ($f_value != 'Y')) || ($articleObj->userCanModify($g_user) && ($f_value == 'S') )) { $access = true; } // If the article is not yet categorized, force it to be before publication. if (($f_action_workflow == "Y") && (($articleObj->getPublicationId() == 0) || ($articleObj->getIssueNumber() == 0) || ($articleObj->getSectionNumber() == 0))) { //$args = $_REQUEST; //$argsStr = camp_implode_keys_and_values($_REQUEST, "=", "&"); //$argsStr .= "&f_article_code[]=".$f_article_number."_".$f_language_selected; //$argsStr .= "&f_mode=single&f_action=publish"; //camp_html_goto_page("/$ADMIN/articles/duplicate.php?".$argsStr); } $success = $articleObj->setWorkflowStatus($f_value); $message = $translator->trans("Article status set to $1", array('$1' => $articleObj->getWorkflowDisplayString($f_value)), 'library'); } } if($affectedArticles == 0 && $success) { $affectedArticles = 1; } return returnJson($affectedArticles, $message, $notAffectedArticles, $errorMessage, $hiperlink); ================================================ FILE: newscoop/admin-files/libs/ContextList/do_data.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once dirname(__FILE__) . '/ContextList.php'; require_once WWW_DIR . '/classes/Article.php'; require_once($GLOBALS['g_campsiteDir'].'/classes/ArticleType.php'); // start >= 0 $start = max(0, empty($_REQUEST['iDisplayStart']) ? 0 : (int) $_REQUEST['iDisplayStart']); // results num >= 10 && <= 100 $limit = min(100, min(10, empty($_REQUEST['iDisplayLength']) ? 0 : (int) $_REQUEST['iDisplayLength'])); // filters - common $articlesParams = array(); $filters = array( 'publication' => array('is', 'integer'), 'issue' => array('is', 'integer'), 'section' => array('is', 'integer'), 'language' => array('is', 'integer'), 'publish_date' => array('is', 'date'), 'publish_date_from' => array('greater_equal', 'date'), 'publish_date_to' => array('smaller_equal', 'date'), 'author' => array('is', 'integer'), 'topic' => array('is', 'integer'), 'workflow_status' => array('is', 'string'), 'creator' => array('is', 'integer'), 'type' => array('is', 'string') ); // mapping form name => db name $fields = array( 'publish_date_from' => 'publish_date', 'publish_date_to' => 'publish_date', 'language' => 'idlanguage', 'creator' => 'iduser', ); //fix for the new issue filters if( isset($_REQUEST['issue']) ) { if($_REQUEST['issue'] != 0) { $issueFiltersArray = explode('_', $_REQUEST['issue']); if(count($issueFiltersArray) > 1) { $_REQUEST['publication'] = $issueFiltersArray[0]; $_REQUEST['issue'] = $issueFiltersArray[1]; $_REQUEST['language'] = $issueFiltersArray[2]; } } } //fix for the new section filters if( isset($_REQUEST['section']) ) { if($_REQUEST['section'] != 0) { $sectionFiltersArray = explode('_', $_REQUEST['section']); if(count($sectionFiltersArray) > 1) { $_REQUEST['publication'] = $sectionFiltersArray[0]; $_REQUEST['language'] = $sectionFiltersArray[2]; $_REQUEST['section'] = $sectionFiltersArray[3]; } } } foreach ($filters as $name => $opts) { if (!empty($_REQUEST[$name])) { $field = !empty($fields[$name]) ? $fields[$name] : $name; $articlesParams[] = new ComparisonOperation($field, new Operator($opts[0], $opts[1]), $_REQUEST[$name]); } } if (empty($_REQUEST['showtype']) || $_REQUEST['showtype'] == "false") { foreach((array) \ArticleType::GetArticleTypes(true) as $one_art_type_name) { $one_art_type = new \ArticleType($one_art_type_name); if ($one_art_type->getFilterStatus()) { $articlesParams[] = new ComparisonOperation('type', new Operator('not', 'string'), $one_art_type->getTypeName()); } } } // filter out PrintDesk articles $articlesParams[] = new ComparisonOperation('type', new Operator('not', 'string'), 'printdesk'); // search if (isset($_REQUEST['sSearch']) && strlen($_REQUEST['sSearch']) > 0) { $search_phrase = $_REQUEST['sSearch']; //$articlesParams[] = new ComparisonOperation('search_phrase', new Operator('is', 'integer'), $search_phrase); $articlesParams[] = new ComparisonOperation('search_phrase', new Operator('like', 'string'), "__match_all.".$search_phrase); } // sorting $sortOptions = array( 0 => 'bynumber', 2 => 'bysectionorder', 3 => 'byname', 12 => 'bycomments', 13 => 'bypopularity', 16 => 'bycreationdate', 17 => 'bypublishdate', ); $sortBy = 'bysectionorder'; $sortDir = 'asc'; $sortingCols = min(1, (int) $_REQUEST['iSortingCols']); for ($i = 0; $i < $sortingCols; $i++) { $sortOptionsKey = (int) $_REQUEST['iSortCol_' . $i]; if (!empty($sortOptions[$sortOptionsKey])) { $sortBy = $sortOptions[$sortOptionsKey]; $sortDir = $_REQUEST['sSortDir_' . $i]; break; } } // get articles $articles = Article::GetList($articlesParams, array(array('field' => $sortBy, 'dir' => $sortDir)), $start, $limit, $articlesCount, true); $list = new ContextList(TRUE); $return = array(); foreach($articles as $article) { $return[] = $list->processItem($article); } return array( 'iTotalRecords' => Article::GetTotalCount(), 'iTotalDisplayRecords' => $articlesCount, 'sEcho' => (int) $_REQUEST['sEcho'], 'aaData' => $return, ); ================================================ FILE: newscoop/admin-files/libs/ContextList/do_order.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir']. "/$ADMIN_DIR/articles/article_common.php"); $article = new Article(); foreach ($f_order as $order => $item) { list($prefix, $articleId) = explode('_', $item); $article->Article($f_language, $articleId); $article->setProperty('ArticleOrder', $order + 1); } return TRUE; ================================================ FILE: newscoop/admin-files/libs/ContextList/filters.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once $GLOBALS['g_campsiteDir'] . '/classes/Publication.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Issue.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Section.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/Author.php'; $translator = \Zend_Registry::get('container')->getService('translator'); // get publications $publications = Publication::GetPublications(); $publicationsNo = is_array($publications) ? sizeof($publications) : 0; $menuPubTitle = $publicationsNo > 0 ? $translator->trans('All Publications', array(), 'library') : $translator->trans('No publications found', array(), 'library'); // get issues $issues = Issue::GetIssues($this->publication, NULL); $issuesNo = is_array($issues) ? sizeof($issues) : 0; $menuIssueTitle = $issuesNo > 0 ? $translator->trans('All Issues', array(), 'library') : $translator->trans('No issues found', array(), 'library'); $articleTypes = ArticleType::GetArticleTypes(true); // get sections $sections = array(); $section_objects = Section::GetSections($this->publication, $this->issue, $this->language); foreach ($section_objects as $section) { if (!isset($sections[$section->getSectionNumber()])) { $sections[$section->getSectionNumber()] = $section; } } $sectionsNo = is_array($sections) ? sizeof($sections) : 0; $menuSectionTitle = $sectionsNo > 0 ? $translator->trans('All Sections', array(), 'library') : $translator->trans('No sections found', array(), 'library'); ?>
    trans('Filter', array(), 'library'); ?>
    filters as $filterName => $filterValue) : ?>
    ================================================ FILE: newscoop/admin-files/libs/ContextList/table.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ $translator = \Zend_Registry::get('container')->getService('translator'); ?>
    ================================================ FILE: newscoop/admin-files/libs/ImageList/ImageList.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once dirname(__FILE__) . '/../BaseList/BaseList.php'; /** * Image list component */ class ImageList extends BaseList { /** @var array */ protected $filters = array( "Source <> 'newsfeed'", ); /** */ public function __construct() { parent::__construct(); $translator = \Zend_Registry::get('container')->getService('translator'); $this->model = new Image; $this->cols = array( 'Id' => NULL, 'ThumbnailFileName' => $translator->trans('Thumbnail'), 'Description' => $translator->trans('Description'), 'Photographer' => $translator->trans('Photographer'), 'Place' => $translator->trans('Place'), 'Date' => $translator->trans('Date'), 'TimeCreated' => $translator->trans('Added'), 'LastModified' => $translator->trans('Last modified', array(), 'library'), 'Source' => $translator->trans('Source', array(), 'library'), 'Status' => $translator->trans('Status'), 'InUse' => $translator->trans('In use') ); $this->searchCols = array( 'Description', 'Photographer', 'Place', ); $this->ignoredCols = array('InUse'); $this->inUseColumn = sizeof($this->cols) - 1; // set sorting $this->defaultSorting = 6; $this->defaultSortingDir = 'desc'; $this->notSortable[] = 1; $this->type = 'image'; } /** * Process row * @param array $row * @return array */ public function processRow(array $row) { global $Campsite, $ADMIN; $Campsite['THUMBNAIL_BASE_URL'] . $row['ThumbnailFileName']; // set thumbnail $row['ThumbnailFileName'] = sprintf('%s', $ADMIN, $row['Id'], $Campsite['THUMBNAIL_BASE_URL'] . $row['ThumbnailFileName'], strip_tags($row['Description'])); // create link for desc /* $row['Description'] = sprintf('%s', $ADMIN, $row['Id'], $row['Description']); */ /* $row['Description'] = " ".$row['Description']." "; $row['Photographer'] = " ".$row['Photographer']." "; $row['Place'] = " ".$row['Place']." "; $row['Date'] = " ".$row['Date']." "; */ // get in use info $image = new Image($row['Id']); $image->fixMissingThumbnail(); $row['InUse'] = (int) $image->inUse(); return array_values($row); } /** * @see BaseList */ public function doData() { $args = $this->getArgs(); if (!empty($args['filter']) && $args['filter'] == 'sda') { $this->filters = array('1'); } return parent::doData(); } } ================================================ FILE: newscoop/admin-files/libs/MediaList/MediaList.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once dirname(__FILE__) . '/../BaseList/BaseList.php'; require_once WWW_DIR . '/classes/Attachment.php'; /** * Media list component */ class MediaList extends BaseList { /** */ public function __construct() { parent::__construct(); $translator = \Zend_Registry::get('container')->getService('translator'); $this->model = new Attachment; $this->cols = array( 'id' => NULL, 'file_name' => $translator->trans('Filename', array(), 'library'), 'mime_type' => $translator->trans('Type'), 'size_in_bytes' => $translator->trans('Size'), 'content_disposition' => $translator->trans('Open in browser', array(), 'library'), 'time_created' => $translator->trans('Added', array(), 'library'), 'last_modified' => $translator->trans('Last modified', array(), 'library'), 'Source' => $translator->trans('Source', array(), 'library'), 'Status' => $translator->trans('Status'), 'InUse' => $translator->trans('In use'), ); $this->searchCols = array( 'file_name', 'extension', 'mime_type', ); $this->ignoredCols = array('InUse'); $this->inUseColumn = sizeof($this->cols) - 1; $this->defaultSorting = 5; $this->defaultSortingDir = 'desc'; $this->type = 'media'; } /** * Process db row * @param array $row * @return array */ public function processRow(array $row) { global $ADMIN; $translator = \Zend_Registry::get('container')->getService('translator'); // edit link $row['file_name'] = sprintf('%s', $ADMIN, $row['id'], $row['file_name']); // human readable size $row['size_in_bytes'] = parent::FormatFileSize($row['size_in_bytes']); // yes/no disposition $row['content_disposition'] = empty($row['content_disposition']) ? $translator->trans('Yes') : $translator->trans('No'); // get in use info $object = new Attachment($row['id']); $row['InUse'] = (int) $object->inUse(); return array_values($row); } } ================================================ FILE: newscoop/admin-files/libs/MediaPlayer/MediaPlayer.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ /** * Media player component */ class MediaPlayer { /** @var string */ private $src; /** @var string */ private $type; /** @var string */ private $alt; /** @var bool */ private static $playerLoaded = FALSE; /** * @param string $src * @param string $type * @param string $alt */ public function __construct($src, $type, $alt = '') { $this->src = (string) $src; $this->type = (string) $type; $this->alt = empty($alt) ? array_shift(explode('?', basename($this->src))) : (string) $alt; // remove ?x=.. part from basename } /** * Outputs html for given media type * @return string */ public function __toString() { global $Campsite; $translator = \Zend_Registry::get('container')->getService('translator'); ob_start(); echo '
    '; // present by content type switch ($this->type) { case 'image/jpeg': case 'image/png': case 'image/gif': echo '', $this->alt, ''; break; case 'audio/mpeg': case 'audio/ogg': case 'audio/mp3': case 'audio/mp4': case 'application/ogg': echo ''; break; case 'video/mp4': case 'video/ogg': case 'video/webm': // html5 + flow player fallback include dirname(__FILE__) . '/video.phtml'; break; case 'video/flv': case 'video/x-flv': $player = $Campsite['WEBSITE_URL'] . '/public/videos/player.swf'; include dirname(__FILE__) . '/flash.phtml'; break; } // download link echo '

    ', $translator->trans('Download file', array(), 'library'), ': '; echo '', $this->alt, '

    '; echo '
    '; if (!self::$playerLoaded) { //include_once dirname(__FILE__) . '/player.phtml'; self::$playerLoaded = TRUE; } return ob_get_clean(); } } ================================================ FILE: newscoop/admin-files/libs/MediaPlayer/flash.phtml ================================================ ================================================ FILE: newscoop/admin-files/libs/MediaPlayer/player.phtml ================================================ ================================================ FILE: newscoop/admin-files/libs/MediaPlayer/video.phtml ================================================ getService('translator'); ?> ================================================ FILE: newscoop/admin-files/media-archive/add.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Image.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/ImageSearch.php'); $translator = \Zend_Registry::get('container')->getService('translator'); if (!$g_user->hasPermission('AddImage')) { camp_html_goto_page("/$ADMIN/logout.php"); } $q_now = $g_ado_db->GetOne("SELECT LEFT(NOW(), 10)"); if (!is_writable($Campsite['IMAGE_DIRECTORY'])) { camp_html_add_msg($translator->trans("Unable to add new image.", array(), 'media_archive')); camp_html_add_msg(camp_get_error_message(CAMP_ERROR_WRITE_DIR, $Campsite['IMAGE_DIRECTORY'])); camp_html_goto_page("/$ADMIN/media-archive/index.php"); exit; } $crumbs = array(); $crumbs[] = array($translator->trans('Content'), ""); $crumbs[] = array($translator->trans('Media Archive', array(), 'media_archive'), "/$ADMIN/media-archive/index.php"); $crumbs[] = array($translator->trans('Add new image', array(), 'media_archive'), ""); $breadcrumbs = camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans('Add new image', array(), 'media_archive').' - Newscoop Admin', 'SET'); echo $breadcrumbs; camp_html_display_msgs(); ?>
    trans('Specify image url if you want to load it.', array(), 'media_archive'); ?>

     

    view->plupload('', array( 'url' => './uploader.php', 'filters' => array( $translator->trans('Image files', array(), 'media_archive') => "jpg,jpeg,gif,png", ), )); ?> ================================================ FILE: newscoop/admin-files/media-archive/add_file.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Attachment.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Translation.php'); $translator = \Zend_Registry::get('container')->getService('translator'); if (!$g_user->hasPermission('AddFile')) { camp_html_goto_page("/$ADMIN/logout.php"); } $q_now = $g_ado_db->GetOne("SELECT LEFT(NOW(), 10)"); $crumbs = array(); $crumbs[] = array($translator->trans('Content'), ""); $crumbs[] = array($translator->trans('Media Archive', array(), 'home'), "/$ADMIN/media-archive/index.php"); $crumbs[] = array($translator->trans('Add new file', array(), 'media_archive'), ""); $breadcrumbs = camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans('Add new file', array(), 'media_archive').' - Newscoop Admin', 'SET'); echo $breadcrumbs; camp_html_display_msgs(); ?>

     

    view->plupload('', array( 'url' => './uploader_file.php', )); ?> ================================================ FILE: newscoop/admin-files/media-archive/ajax_save.php ================================================ hasPermission('ChangeImage')) { camp_html_goto_page("/$ADMIN/logout.php"); } $fieldNames = array('description' => 'Description', 'photographer' => 'Photographer', 'place' => 'Place', 'date' => 'Date', 'status' => 'Status'); $updateArray = array($fieldNames[$f_field] => $f_value); $imageObj->update($updateArray); ================================================ FILE: newscoop/admin-files/media-archive/do_del.php ================================================ getService('translator'); $em = \Zend_Registry::get('container')->getService('em'); $imageService = \Zend_Registry::get('container')->getService('image'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_image_id = Input::Get('f_image_id', 'int', 0); if (!Input::IsValid() || ($f_image_id <= 0)) { camp_html_goto_page("/$ADMIN/media-archive/index.php"); } $image = $em->getRepository('Newscoop\Image\LocalImage')->findOneById($f_image_id); // This file can only be accessed if the user has the right to delete images. if (!$g_user->hasPermission('DeleteImage')) { camp_html_goto_page("/$ADMIN/logout.php"); } if ($imageService->inUse($image)) { camp_html_add_msg($translator->trans("Image is in use, it cannot be deleted.", array(), 'media_archive')); camp_html_goto_page("/$ADMIN/media-archive/index.php"); } $imageDescription = $image->getDescription(); $result = $imageService->remove($image); if (!$result) { camp_html_add_msg($translator->trans("Could not delete record from the database.", array(), 'api')); } else { // Go back to article image list. camp_html_add_msg($translator->trans("Image $1 deleted.", array('$1' => $imageDescription), 'media_archive'), "ok"); } camp_html_goto_page("/$ADMIN/media-archive/index.php"); ?> ================================================ FILE: newscoop/admin-files/media-archive/do_edit-attachment.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // check input $f_attachment_id = Input::Get('f_attachment_id', 'int', 0); $f_description = Input::Get('f_description', 'string', ''); $f_content_disposition = Input::Get('f_content_disposition', 'string', ''); if (!Input::IsValid() || ($f_attachment_id <= 0)) { camp_html_goto_page("/$ADMIN/media-archive/index.php#files"); } $em = \Zend_Registry::get('container')->getService('em'); $attachment = $em->getRepository('Newscoop\Entity\Attachment')->findOneById($f_attachment_id); $description = $em->getRepository('Newscoop\Entity\Translation')->findOneBy(array( 'phrase_id' => $attachment->getDescription()->getPhraseId() )); if (!$description) { $nextTranslationPhraseId = $em->getRepository('Newscoop\Entity\AutoId')->getNextTranslationPhraseId(); $description = new \Newscoop\Entity\Translation($nextTranslationPhraseId); $em->persist($description); } $description->setLanguage($attachment->getLanguage()); $description->setTranslationText($f_description); $attachment->setUpdated(new \DateTime()); $attachment->setContentDisposition($f_content_disposition); $em->flush(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('attachment'); camp_html_add_msg($translator->trans('Attachment updated.', array(), 'media_archive'), 'ok'); camp_html_goto_page("/$ADMIN/media-archive/edit-attachment.php?f_attachment_id=".$attachment->getId()); ================================================ FILE: newscoop/admin-files/media-archive/do_edit.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // check input $f_image_id = Input::Get('f_image_id', 'int', 0); $f_image_description = Input::Get('f_image_description'); $f_image_photographer = Input::Get('f_image_photographer'); $f_image_place = Input::Get('f_image_place'); $f_image_date = Input::Get('f_image_date'); $f_image_status = Input::Get('f_image_status'); //$f_image_url = Input::Get('f_image_url', 'string', '', true); if (!Input::IsValid() || ($f_image_id <= 0)) { camp_html_goto_page("/$ADMIN/media-archive/index.php"); } $imageObj = new Image($f_image_id); if (!$g_user->hasPermission('ChangeImage')) { camp_html_goto_page("/$ADMIN/logout.php"); } $updateArray = array('Description' => $f_image_description, 'Photographer' => $f_image_photographer, 'Place' => $f_image_place, 'Date' => $f_image_date, 'Status' => $f_image_status, 'photographer_url' => Input::Get('f_photographer_url')); //if (!empty($f_image_url)) { // $updateArray['URL'] = $f_image_url; //} $imageObj->update($updateArray); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('image'); camp_html_add_msg($translator->trans("Image updated.", array(), 'media_archive'), "ok"); camp_html_goto_page("/$ADMIN/media-archive/edit.php?f_image_id=$f_image_id"); ?> ================================================ FILE: newscoop/admin-files/media-archive/do_multiedit.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Article.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Image.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/ImageSearch.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Log.php'); $translator = \Zend_Registry::get('container')->getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } foreach ($_POST['image'] as $id => $values) { $imageObj = new Image((int) $id); $updateArray = array( 'Description' => $values['f_description'], 'Photographer' => $values['f_photographer'], 'Place' => $values['f_place'], 'Date' => $values['f_date'], 'photographer_url' => $values['f_photographer_url'], ); $imageObj->update($updateArray); } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('image'); camp_html_add_msg($translator->trans("Images updated.", array(), 'media_archive'), "ok"); camp_html_goto_page("/$ADMIN/media-archive/index.php"); ?> ================================================ FILE: newscoop/admin-files/media-archive/do_multiedit_file.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Log.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Article.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Attachment.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/ArticleAttachment.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Translation.php'); $translator = \Zend_Registry::get('container')->getService('translator'); $em = \Zend_Registry::get('container')->getService('em'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $f_language_id = Input::Get('f_language_id', 'int', 0); $f_language_selected = Input::Get('f_language_selected', 'int', 0); foreach ($_POST['file'] as $id => $values) { $attachment = $em->getRepository('Newscoop\Entity\Attachment')->findOneById($id); $description = $em->getRepository('Newscoop\Entity\Translation')->findOneBy(array( 'phrase_id' => $attachment->getDescription()->getPhraseId() )); if (!$description) { $nextTranslationPhraseId = $em->getRepository('Newscoop\Entity\AutoId')->getNextTranslationPhraseId(); $description = new \Newscoop\Entity\Translation($nextTranslationPhraseId); $em->persist($description); } if ($f_language_selected > 0) { $language = $em->getRepository('Newscoop\Entity\Language')->findOneByCode($f_language_selected); $description->setLanguage($language); } else { $publicationService = \Zend_Registry::get('container')->get('newscoop.publication_service'); $publicationMetadata = $publicationService->getPublicationMetadata(); $language = $em->getRepository('Newscoop\Entity\Language')->findOneById($publicationMetadata['publication']['id_default_language']); $description->setLanguage($language); } $description->setTranslationText($values['f_description']); $attachment->setDescription($description); $attachment->setUpdated(new \DateTime()); $attachment->setContentDisposition($values['f_content_disposition']); } $em->flush(); camp_html_add_msg($translator->trans("Images updated.", array(), 'media_archive'), "ok"); camp_html_goto_page("/$ADMIN/media-archive/index.php#files"); ?> ================================================ FILE: newscoop/admin-files/media-archive/do_upload.php ================================================ * @author Paweł Mikołajczuk * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ use Symfony\Component\HttpFoundation\File\UploadedFile; $translator = \Zend_Registry::get('container')->getService('translator'); $container = \Zend_Registry::get('container'); $request = $container->get('request'); $params = $request->request->all(); $f_image_url = Input::Get('f_image_url', 'string', '', true); $nrOfFiles = isset($params['uploader_count']) ? $params['uploader_count'] : 0; $f_article_edit = isset($params['f_article_edit']) ? $params['f_article_edit'] : null; $f_language_id = isset($params['f_language_id']) ? $params['f_language_id'] : null; $f_article_number = isset($params['f_article_number']) ? $params['f_article_number'] : null; if (!SecurityToken::isValid() && !isset($f_article_edit)) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('AddImage') && !isset($f_article_edit)) { camp_html_display_error($translator->trans("You do not have the right to add images.", array(), 'media_archive')); exit; } if (empty($f_image_url) && empty($nrOfFiles)) { camp_html_add_msg($translator->trans("You must select an image file to upload.", array(), 'media_archive')); if ($f_article_edit) { camp_html_goto_page('/'.$ADMIN.'/image/article-attach/article_number/'.$f_article_number.'/language_id/'.$f_language_id); } camp_html_goto_page("/$ADMIN/media-archive/add.php"); } $images = array(); $user = $container->get('security.context')->getToken()->getUser(); $em = $container->get('em'); $language = $em->getRepository('Newscoop\Entity\Language')->findOneByCode($request->getLocale()); $imageService = $container->get('image'); // load image from url if (!empty($f_image_url)) { $newFileName = md5(uniqid()).'__'.basename($f_image_url); $fileLocation = $imageService->getImagePath() . $newFileName; file_put_contents($fileLocation, file_get_contents($f_image_url)); // Check if it is really an image file $imageInfo = getimagesize($fileLocation); if ($imageInfo === false) { unlink($fileLocation); return new PEAR_Error($translator->trans('URL $1 is not an image.', array('$1' => $f_image_url), 'api')); } $mime = getimagesize($fileLocation); $file = new UploadedFile($fileLocation, $newFileName, $mime['mime'], filesize($fileLocation), null, true); $result = $imageService->upload($file, array('user' => $user)); $result->setDate('0000-00-00'); $images[] = $result; } // process uploaded images for ($i = 0; $i < $nrOfFiles; $i++) { $tmpnameIdx = 'uploader_' . $i . '_tmpname'; $nameIdx = 'uploader_' . $i . '_name'; $statusIdx = 'uploader_' . $i . '_status'; if ($params[$statusIdx] == 'done') { $fileLocation = $imageService->getImagePath() . $params[$tmpnameIdx]; if (file_exists($fileLocation) && is_readable($fileLocation)) { $mime = getimagesize($fileLocation); $file = new UploadedFile($fileLocation, $params[$nameIdx], $mime['mime'], filesize($fileLocation), null, true); $result = $imageService->upload($file, array('user' => $user)); $result->setDate('0000-00-00'); $images[] = $result; } else { camp_html_add_msg($translator->trans("An error occured while uploading the file $1", array('$1' => $params[$nameIdx]), 'media_archive')); if ($nrOfFiles == 1) { camp_html_goto_page("/$ADMIN/media-archive/add.php", true); } } } } $em->flush(); if (!empty($images)) { camp_html_add_msg($translator->trans('$1 files uploaded.', array('$1' => count($images)), 'media_archive', "ok")); if ($f_article_edit) { require_once($GLOBALS['g_campsiteDir'].'/classes/Article.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Image.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Issue.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Section.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Language.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Publication.php'); foreach ($images as $image) { $ImageTemplateId = ArticleImage::GetUnusedTemplateId($f_article_number); ArticleImage::AddImageToArticle($image->getId(), $f_article_number, $ImageTemplateId); } camp_html_goto_page('/'.$ADMIN.'/image/edit-image-data/article_number/'.$f_article_number.'/language_id/'.$f_language_id); } else { camp_html_goto_page("/$ADMIN/media-archive/multiedit.php"); } } else { if ($f_article_edit) { camp_html_goto_page('/'.$ADMIN.'/image/article-attach/article_number/'.$f_article_number.'/language_id/'.$f_language_id); } else { camp_html_add_msg($f_path . DIR_SEP . basename($newFilePath)); camp_html_goto_page($backLink); } } ?> ================================================ FILE: newscoop/admin-files/media-archive/do_upload_file.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ use Symfony\Component\HttpFoundation\File\UploadedFile; require_once($GLOBALS['g_campsiteDir'].'/classes/Attachment.php'); $container = \Zend_Registry::get('container'); $request = $container->get('request'); $translator = \Zend_Registry::get('container')->getService('translator'); $params = $request->request->all(); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('AddFile')) { camp_html_display_error($translator->trans("You do not have the right to add files.", array(), 'media_archive')); exit; } $nrOfFiles = isset($params['uploader_count']) ? $params['uploader_count'] : 0; $user = $container->get('security.context')->getToken()->getUser(); $em = $container->get('em'); $language = $em->getRepository('Newscoop\Entity\Language')->findOneByCode($request->getLocale()); $attachmentService = $container->get('attachment'); // process uploaded files for ($i = 0; $i < $nrOfFiles; $i++) { $tmpnameIdx = 'uploader_' . $i . '_tmpname'; $nameIdx = 'uploader_' . $i . '_name'; $statusIdx = 'uploader_' . $i . '_status'; if ($params[$statusIdx] == 'done') { $fileLocation = $attachmentService->getStorageLocation(new \Newscoop\Entity\Attachment()).'/'.$params[$tmpnameIdx]; if (file_exists($fileLocation) && is_readable($fileLocation)) { $file = new UploadedFile($fileLocation, $params[$nameIdx], mime_content_type($fileLocation), filesize($fileLocation), null, true); $result = $attachmentService->upload($file, '', $language, array('user' => $user)); } else { camp_html_add_msg($translator->trans("An error occured while uploading the file $1", array('$1' => $params[$nameIdx]), 'media_archive')); if ($nrOfFiles == 1) { camp_html_goto_page("/$ADMIN/media-archive/add_file.php", true); } } } } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('attachment'); if ($result) { camp_html_add_msg($translator->trans('$1 files uploaded.', array('$1' => $nrOfFiles), 'media_archive'), "ok"); camp_html_goto_page("/$ADMIN/media-archive/multiedit_file.php"); } else { camp_html_add_msg($f_path . DIR_SEP . basename($newFilePath)); camp_html_goto_page($backLink); } ?> ================================================ FILE: newscoop/admin-files/media-archive/edit-attachment.php ================================================ getService('translator'); if (!Input::IsValid()) { camp_html_goto_page("/$ADMIN/media-archive/index.php#files"); } $em = \Zend_Registry::get('container')->getService('em'); $attachment = $em->getRepository('Newscoop\Entity\Attachment')->findOneById($f_attachment_id); $attachmentService = \Zend_Registry::get('container')->getService('attachment'); $label_text = ''; $crumbs = array(); $crumbs[] = array($translator->trans('Content'), ""); $crumbs[] = array($translator->trans('Media Archive', array(), 'home'), "/$ADMIN/media-archive/index.php#files"); if ($g_user->hasPermission('ChangeImage')) { $label_text = $translator->trans('Change attachment information', array(), 'media_archive'); } else { $label_text = $translator->trans('View attachment', array(), 'media_archive'); } $crumbs[] = array($label_text, ''); $breadcrumbs = camp_html_breadcrumbs($crumbs); $controller->view->headTitle($label_text.' - Newscoop Admin', 'SET'); echo $breadcrumbs; ?>

    getName(); ?>

    trans('Created', array(), 'media_archive'); ?>: getCreated()->format('Y-m-d H:i:s'); ?>, trans('Last modified', array(), 'media_archive'); ?>: getUpdated()->format('Y-m-d H:i:s'); ?>

    getAttachmentUrl($attachment) . '?g_show_in_browser=1', $attachment->getMimeType()); ?>
    trans('Type'); ?>:
    getMimeType(); ?>
    trans('Size', array(), 'media_archive'); ?>:
    getSizeInBytes()); ?>
    getHttpCharset()) { ?>
    trans('Charset', array(), 'media_archive'); ?>:
    getHttpCharset(); ?>
    trans('Change attachment information', array(), 'media_archive'); ?>
    • getContentDisposition() == NULL) { echo ' checked="checked"'; } ?> /> getContentDisposition() == 'attachment') { echo ' checked="checked"'; } ?> />
    ================================================ FILE: newscoop/admin-files/media-archive/edit.php ================================================ getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('preferences'); $f_image_id = Input::Get('f_image_id', 'int', 0); $f_fix_thumbs = Input::Get('f_fix_thumbs', 'int', 0, true); if ($f_fix_thumbs) { //regenerate missing thumbs $returnMessage = $translator->trans('No thumbnails were fixed.', array(), 'media_archive'); $imageObj = new Image(); $imagesList = $imageObj->GetList(array(), array(), 0, 0, $imagesCount, TRUE); foreach ($imagesList as $image) { $thumbLocation = $image->getThumbnailStorageLocation(); if (!file_exists($thumbLocation)) { if ($image->generateThumbnailFromImage()) { $returnMessage = $translator->trans('Missing thumbnails fixed.', array(), 'media_archive'); } } } camp_html_add_msg($returnMessage); camp_html_goto_page("/$ADMIN/media-archive/index.php"); exit(); } if (!Input::IsValid()) { camp_html_goto_page("/$ADMIN/media-archive/index.php"); } $imageObj = new Image($f_image_id); $articles = ArticleImage::GetArticlesThatUseImage($f_image_id); $allowedExtensions = array('jpg', 'jpeg', 'tiff', 'tif'); $imagePathParts = explode('.', $imageObj->getImageFileName()); $imageExtension = strtolower($imagePathParts[count($imagePathParts) - 1]); $iptcDate = null; $iptcPlace = null; $iptcPhotographer = null; $iptcDescription = null; if (in_array($imageExtension, $allowedExtensions)) { $exif = @exif_read_data($imageObj->getImageStorageLocation()); if (isset($exif['DateTime'])) { $exifDate = date('Y-m-d', strtotime($exif['DateTime'])); } $size = getimagesize($imageObj->getImageStorageLocation(), $info); $iptc = array(); foreach ($info as $key => $value) { $iptc[$key] = iptcparse($value); } if (isset($iptc['APP13'])) { $iptc = $iptc['APP13']; } if (isset($iptc['2#055'])) { $iptcDate = $iptc['2#055'][0]; $iptcDate = date('Y-m-d', strtotime($iptcDate)); } if (isset($iptc['2#080'])) { $iptcPhotographer = strip_tags($iptc['2#080'][0]); } if (isset($iptc['2#120'])) { $iptcDescription = strip_tags($iptc['2#120'][0]); } if (isset($iptc['2#090']) || isset($iptc['2#092']) || isset($iptc['2#101'])) { $iptcPlace = array(); if (isset($iptc['2#101'])) { $iptcPlace[] = strip_tags($iptc['2#101'][0]); } if (isset($iptc['2#090'])) { $iptcPlace[] = strip_tags($iptc['2#090'][0]); } if (isset($iptc['2#092'])) { $iptcPlace[] = strip_tags($iptc['2#092'][0]); } $iptcPlace = implode(', ', $iptcPlace); } } $crumbs = array(); $crumbs[] = array($translator->trans('Content'), ""); $crumbs[] = array($translator->trans('Media Archive', array(), 'home'), "/$ADMIN/media-archive/index.php"); if ($g_user->hasPermission('ChangeImage')) { $label_text = $translator->trans('Change image information', array(), 'media_archive'); } else { $label_text = $translator->trans('View image', array(), 'media_archive'); } $crumbs[] = array($label_text, ''); $breadcrumbs = camp_html_breadcrumbs($crumbs); $controller->view->headTitle($label_text.' - Newscoop Admin', 'SET'); echo $breadcrumbs; ?>

    hasPermission('AddImage')) { ?> hasPermission('DeleteImage') && !$imageObj->inUse()) { ?>
    /add.png" BORDER="0" alt="trans('Add new image', array(), 'media_archive'); ?>"> trans('Add new image', array(), 'media_archive'); ?> camp_javascriptspecialchars($imageObj->getDescription()))); ?>');">/delete.png" BORDER="0" ALT="trans('Delete image $1', array('$1' => htmlspecialchars($imageObj->getDescription())), 'media_archive'); ?>"> camp_javascriptspecialchars($imageObj->getDescription()))); ?>');">trans('Delete'); ?>

    <?php echo htmlspecialchars($imageObj->getDescription()); ?>

    hasPermission('ChangeImage')) { ?>

    MediaRichTextCaptions; $captionLimit = $preferencesService->MediaCaptionLength; if ($captionStatus == 'Y') { // CHeck if language is this is valid $languageSelectedObj = new Language((int) camp_session_get('LoginLanguageId', 0)); $editorLanguage = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : $languageSelectedObj->getCode(); $editorOptions = array( 'max_chars' => $captionLimit, 'toolbar_length' => 28, ); $iptcDescriptionCode = "tinyMCE.editors['f_image_description'].setContent('". addcslashes($iptcDescription, "'")."');"; editor_load_tinymce('f_image_description', $g_user, $editorLanguage, $editorOptions); ?> getLocation() == 'remote') { ?>
    trans("Change image information", array(), 'media_archive'); ?>
    trans('Description'); if ($captionStatus == 'Y' && $captionLimit > 0) { echo $translator->trans(' (max. $1 characters)', array('$1' => $captionLimit), 'media_archive'); } ?>: IPTC
    trans('Description'); ?>: IPTC
    trans("Photographer"); ?>: IPTC
    trans('Photographer URL', array(), 'media_archive'); ?>:
    trans("Place"); ?>: IPTC
    trans("Date"); ?>:  EXIF IPTC
    Import all IPTC
    trans("Status"); ?>: getStatus() == 'approved') echo('checked'); ?> >Approved getStatus() == 'unapproved') echo('checked'); ?>>Unapproved
    trans("Source", array(), 'media_archive'); ?>: getSource() == 'local') echo $translator->trans('Local', array(), 'media_archive'); ?> getSource() == 'feedback') echo $translator->trans('Feedback', array(), 'media_archive'); ?>
    trans("URL"); ?>: getUrl()); ?>
    trans("Image"); ?>: getImageStorageLocation()); ?>
    hasPermission('ChangeImage')) if (count($articles) > 0) { // image is in use ////////////////////////////////////////////////////////////////// ?> getService('newscoop.editor'); foreach ($articles as $article) { echo ''; echo ''; echo ""; echo ""; } ?>
    trans('Used in articles', array(), 'media_archive'); ?>: trans('Language'); ?>
    '; echo "getLink($article).'">'.$this->view->escape($article->getTitle()).'".$this->view->escape($article->getLanguageName())."
    ================================================ FILE: newscoop/admin-files/media-archive/editor_load_tinymce.php ================================================ hasPermission('EditorCopyCutPaste')) { $plugins[] = 'paste'; } if ($p_user->hasPermission('EditorFindReplace')) { $plugins[] = 'searchreplace'; } if ($p_user->hasPermission('EditorEnlarge')) { $plugins[] = 'fullscreen'; } if ($p_user->hasPermission('EditorLink')) { $plugins[] = 'campsiteinternallink'; } if ($p_user->hasPermission('EditorFontColor')) { $plugins[] = 'codehighlighting'; } if ($p_user->hasPermission('EditorTextDirection')) { $plugins[] = 'directionality'; } $plugins_list = implode(",", $plugins); $statusbar_location = "none"; if ($p_user->hasPermission('EditorStatusBar')) { $statusbar_location = "bottom"; } /** STEP 3 ******************************************************** * We create a default configuration to be used by all the editors. * If you wish to configure some of the editors differently this * will be done in step 4. ******************************************************************/ $toolbar = array(); if ($p_user->hasPermission('EditorBold')) { $toolbar[] = "bold"; } if ($p_user->hasPermission('EditorItalic')) { $toolbar[] = "italic"; } if ($p_user->hasPermission('EditorUnderline')) { $toolbar[] = "underline"; } if ($p_user->hasPermission('EditorStrikethrough')) { $toolbar[] = "strikethrough"; $toolbar[] = "blockquote"; } if ($p_user->hasPermission('EditorTextAlignment')) { $toolbar[] = "|"; $toolbar[] = "justifyleft"; $toolbar[] = "justifycenter"; $toolbar[] = "justifyright"; $toolbar[] = "justifyfull"; } if ($p_user->hasPermission('EditorIndent')) { $toolbar[] = "|"; $toolbar[] = "outdent"; $toolbar[] = "indent"; } if ($p_user->hasPermission('EditorCopyCutPaste')) { $toolbar[] = "|"; $toolbar[] = "copy"; $toolbar[] = "cut"; $toolbar[] = "paste"; $toolbar[] = "pastetext"; $toolbar[] = "pasteword"; } if ($p_user->hasPermission('EditorUndoRedo')) { $toolbar[] = "|"; $toolbar[] = "undo"; $toolbar[] = "redo"; } if ($p_user->hasPermission('EditorTextDirection')) { $toolbar[] = "|"; $toolbar[] = "ltr"; $toolbar[] = "rtl"; } if ($p_user->hasPermission('EditorLink')) { $toolbar[] = "|"; $toolbar[] = "campsiteinternallink"; $toolbar[] = "link"; } if ($p_user->hasPermission('EditorSourceView')) { $toolbar[] = "code"; } if ($p_user->hasPermission('EditorEnlarge')) { $toolbar[] = "fullscreen"; } if ($p_user->hasPermission('EditorHorizontalRule')) { $toolbar[] = "hr"; } if ($p_user->hasPermission('EditorFontColor')) { $toolbar[] = "forecolor"; $toolbar[] = "backcolor"; $toolbar[] = 'codehighlighting'; } if ($p_user->hasPermission('EditorSubscript')) { $toolbar[] = "sub"; } if ($p_user->hasPermission('EditorSuperscript')) { $toolbar[] = "sup"; } if ($p_user->hasPermission('EditorCharacterMap')) { $toolbar[] = "charmap"; } if ($p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber')) { $toolbar[] = "|"; $toolbar[] = "bullist"; $toolbar[] = "numlist"; } elseif ($p_user->hasPermission('EditorListBullet') && !$p_user->hasPermission('EditorListNumber')) { $toolbar[] = "|"; $toolbar[] = "bullist"; } elseif (!$p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber')) { $toolbar[] = "|"; $toolbar[] = "numlist"; } // Create toolbar rows base on toolbarlength option $toolbarRow = 0; $toolbarCollector = array(); while (count($toolbar) > 0) { $tmpArray = array_splice($toolbar, 0, $toolbarlength); if (in_array('forecolor', $tmpArray) && in_array('backcolor', $tmpArray)) { $button = array_pop($tmpArray); array_unshift($toolbar, $button); } if ($tmpArray[0] == '|') { $tmpArray = array_splice($tmpArray, 1); } if ($tmpArray[count($tmpArray)-1] == '|') { $tmpArray = array_splice($tmpArray, 0, count($tmpArray)-1); } $toolbarCollector[$toolbarRow] = $tmpArray; $toolbarRow++; } // Add fontface and fontsize select fields on logical positions if ($p_user->hasPermission('EditorFontFace')) { $lastIndex = (count($toolbarCollector) - 1); $lastRow = $toolbarCollector[$lastIndex]; if (($toolbarlength - count($toolbarCollector[$lastIndex])) > 5) { $toolbarCollector[$lastIndex][] = "|"; $toolbarCollector[$lastIndex][] = "formatselect"; } else { $toolbarCollector[++$lastIndex][] = "formatselect"; } } if ($p_user->hasPermission('EditorFontSize')) { $lastIndex = (count($toolbarCollector) - 1); $lastRow = $toolbarCollector[$lastIndex]; if (($toolbarlength - count($toolbarCollector[$lastIndex])) > 5) { $toolbarCollector[$lastIndex][] = "|"; $toolbarCollector[$lastIndex][] = "fontsizeselect"; } else { $toolbarCollector[++$lastIndex][] = "fontsizeselect"; } } // Make sure there are always 3 toolbars, tinymce requires 3 to be defined if (count($toolbarCollector) < 3) { $toolbarCollector = array_pad($toolbarCollector, 3, array()); } $localeFile = $Campsite['CAMPSITE_DIR'] . '/js/tinymce/langs/' . $p_editorLanguage . '.js'; if (!file_exists($localeFile)) { $p_editorLanguage = 'en'; } // Convert resting options to json $optionsAsJson = json_encode($options); ?> ================================================ FILE: newscoop/admin-files/media-archive/index.php ================================================ getService('translator'); $controller->view->headTitle($translator->trans('Media Archive', array(), 'media_archive').' - Newscoop Admin', 'SET'); camp_html_content_top($translator->trans('Media Archive', array(), 'media_archive'), NULL); ?>
    _helper->service('package')->getCountBy(array())); $paginator->setItemCountPerPage($limit); $paginator->setCurrentPageNumber(1); echo $this->view->partial('slideshow-list.phtml', array( 'slideshows' => $this->view->slideshowsJson($this->_helper->service('package')->findBy(array(), array('id' => 'desc'), $limit, 0)), 'pages' => $paginator->count(), 'articlePage' => false, )); ?>
    hasPermission('AddFile')) { ?> /add.png" alt="trans('Add new file', array(), 'media_archive'); ?>"> trans('Add new file', array(), 'media_archive'); ?> hasPermission('DeleteFile')) { ?>
    setColVis(TRUE); $list->setSearch(TRUE); $list->render(); ?>
    ================================================ FILE: newscoop/admin-files/media-archive/multiedit.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Image.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/ImageSearch.php'); require_once($GLOBALS['g_campsiteDir']."/$ADMIN_DIR/media-archive/editor_load_tinymce.php"); $translator = \Zend_Registry::get('container')->getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('preferences'); $captionStatus = $preferencesService->MediaRichTextCaptions; $captionLimit = $preferencesService->MediaCaptionLength; if (!$g_user->hasPermission('AddImage')) { camp_html_goto_page("/$ADMIN/logout.php"); } // get all images without set date (0000-00-00) $imageSearch = new ImageSearch('0000', 'id', 'ASC', 0, 100); $imageSearch->run(); $imageData = $imageSearch->getImages(); if (empty($imageData)) { camp_html_add_msg($translator->trans('No images for multi editing.', array(), 'media_archive'), 'ok'); camp_html_goto_page("/$ADMIN/media-archive/index.php"); } $crumbs = array(); $crumbs[] = array($translator->trans('Content'), ""); $crumbs[] = array($translator->trans('Media Archive', array(), 'media_archive'), "/$ADMIN/media-archive/index.php"); $crumbs[] = array($translator->trans('Edit images', array(), 'media_archive'), ""); $breadcrumbs = camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans('Edit images', array(), 'media_archive').' - Newscoop Admin', 'SET'); echo $breadcrumbs; camp_html_display_msgs(); ?>
      getImageFileName()); $imageExtension = strtolower($imagePathParts[count($imagePathParts) - 1]); if (in_array($imageExtension, $allowedExtensions)) { $exif = @exif_read_data($imageObj->getImageStorageLocation()); if (isset($exif['DateTime'])) { $exifDate = date('Y-m-d', strtotime($exif['DateTime'])); } $size = getimagesize($imageObj->getImageStorageLocation(), $info); $iptc = array(); foreach ($info as $key => $value) { $iptc[$key] = iptcparse($value); } if (isset($iptc['APP13'])) { $iptc = $iptc['APP13']; } if (isset($iptc['2#055'])) { $iptcDate = $iptc['2#055'][0]; $iptcDate = date('Y-m-d', strtotime($iptcDate)); } if (isset($iptc['2#080'])) { $iptcPhotographer = $iptc['2#080'][0]; } if (isset($iptc['2#120'])) { $iptcDescription = $iptc['2#120'][0]; } if (isset($iptc['2#090']) || isset($iptc['2#092']) || isset($iptc['2#101'])) { $iptcPlace = array(); if (isset($iptc['2#101'])) { $iptcPlace[] = $iptc['2#101'][0]; } if (isset($iptc['2#090'])) { $iptcPlace[] = $iptc['2#090'][0]; } if (isset($iptc['2#092'])) { $iptcPlace[] = $iptc['2#092'][0]; } $iptcPlace = implode(', ', $iptcPlace); } } $image['date'] = date('Y-m-d'); if (isset($exifDate)) { $image['date'] = $exifDate; } if (isset($iptcDate)) { $image['date'] = $iptcDate; } if (isset($iptcDescription)) { $image['description'] = $iptcDescription; } if (isset($iptcPhotographer)) { $image['photographer'] = $iptcPhotographer; } if (isset($iptcPlace)) { $image['place'] = $iptcPlace; } ?>
    • trans("Change image information", array(), 'media_archive'); ?>
      trans("Description"); ?>:
      '.$image['description'].''; } else { echo ''; } ?>
      trans("Photographer"); ?>:
      trans("Photographer URL"); ?>:
      trans("Place"); ?>:
      trans("Date"); ?>:
    0) { $languageSelectedObj = new Language((int) camp_session_get('LoginLanguageId', 0)); $editorLanguage = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : $languageSelectedObj->getCode(); $editorOptions = array( 'max_chars' => $captionLimit, 'toolbar_length' => 15, ); editor_load_tinymce($loadAsRichtext, $g_user, $editorLanguage, $editorOptions); } ?> ================================================ FILE: newscoop/admin-files/media-archive/multiedit_file.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ $translator = \Zend_Registry::get('container')->getService('translator'); require_once($GLOBALS['g_campsiteDir'].'/classes/Input.php'); require_once($GLOBALS['g_campsiteDir'].'/classes/Attachment.php'); if (!$g_user->hasPermission('AddFile')) { camp_html_goto_page("/$ADMIN/logout.php"); } // get all files without description (0) $attachmentService = \Zend_Registry::get('container')->getService('attachment'); $fileData = $attachmentService->getUnedited($g_user->getUserId()); if (empty($fileData)) { camp_html_add_msg($translator->trans('No files for multi editing.', array(), 'media_archive'), 'ok'); camp_html_goto_page("/$ADMIN/media-archive/index.php"); } $crumbs = array(); $crumbs[] = array($translator->trans('Content'), ""); $crumbs[] = array($translator->trans('Media Archive', array(), 'media_archive'), "/$ADMIN/media-archive/index.php"); $crumbs[] = array($translator->trans('Edit files', array(), 'media_archive'), ""); $breadcrumbs = camp_html_breadcrumbs($crumbs); $controller->view->headTitle($translator->trans('Edit files', array(), 'media_archive').' - Newscoop Admin', 'SET'); echo $breadcrumbs; camp_html_display_msgs(); ?>
      $file) { ?>
    • trans("Change file information", array(), 'media_archive'); ?>
      trans("Description"); ?>:
      $file['name']), 'media_archive'); ?>"/>
      trans("Should this file only be available for this translation of the article, or for all translations?", array(), 'media_archive'); ?>

      trans("Do you want this file to open in the user's browser, or to automatically download?", array(), 'media_archive'); ?>

    ================================================ FILE: newscoop/admin-files/media-archive/uploader.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir']. "/classes/Plupload.php"); $translator = \Zend_Registry::get('container')->getService('translator'); if (!$g_user->hasPermission('AddImage')) { camp_html_display_error($translator->trans("You do not have the right to add images.", array(), 'media_archive')); exit; } // Plupload $files = Plupload::OnMultiFileUpload($Campsite['IMAGE_DIRECTORY']); ?> ================================================ FILE: newscoop/admin-files/media-archive/uploader_file.php ================================================ * @copyright 2010 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl.txt * @link http://www.sourcefabric.org */ require_once($GLOBALS['g_campsiteDir']. "/classes/Plupload.php"); require_once($GLOBALS['g_campsiteDir'].'/classes/Attachment.php'); $translator = \Zend_Registry::get('container')->getService('translator'); if (!$g_user->hasPermission('AddFile')) { camp_html_display_error($translator->trans("You do not have the right to add files.", array(), 'media_archive')); exit; } $attachmentObj = new Attachment(); $attachmentObj->makeDirectories(); // Plupload $files = Plupload::OnMultiFileUpload($attachmentObj->getStorageLocation()); ?> ================================================ FILE: newscoop/admin-files/menu.php ================================================ getService('translator'); global $ADMIN, $g_user; // Page title $siteTitle = (!empty($Campsite['site']['title'])) ? htmlspecialchars($Campsite['site']['title']) : $translator->trans("Newscoop", array(), 'home') . $Campsite['VERSION']; // locale setting for datepicker $locale = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : 'en'; ?> <?php p($siteTitle); ?>
    ================================================ FILE: newscoop/admin-files/pending_articles/index.php ================================================ getService('translator'); $f_publication_id = Input::Get('f_publication_id', 'int', null); $f_language_id = Input::Get('f_language_id', 'int', 1); if (isset($_SESSION['f_language_selected'])) { $f_old_language_selected = (int)$_SESSION['f_language_selected']; } else { $f_old_language_selected = 0; } $f_language_selected = (int)camp_session_get('f_language_selected', 0); camp_html_content_top($translator->trans('Pending articles', array(), 'articles'), NULL); $controller->view->headTitle($translator->trans('Pending articles', array(), 'articles').' - Newscoop Admin', 'SET'); // set up $articlelist = new ArticleList(); $articlelist->setPublication($f_publication_id); $articlelist->setWorkflowStatus('pending'); $articlelist->setLanguage($f_language_id); $articlelist->setColVis(TRUE); $articlelist->setSearch(TRUE); $articlelist->setHidden('Status'); $articlelist->setHidden('OnFrontPage'); $articlelist->setHidden('OnSectionPage'); $articlelist->setHidden('Comments'); $articlelist->setHidden('Reads'); $articlelist->setHidden('UseMap'); $articlelist->setHidden('Locations'); $articlelist->setHidden('PublishDate'); $articlelist->setHidden('Preview'); // render //$articlelist->renderFilters(); $articlelist->renderActions(); $articlelist->render(); camp_html_copyright_notice(); ?> ================================================ FILE: newscoop/admin-files/plugins/manage.php ================================================ getService('translator'); if (!$g_user->hasPermission('plugin_manager')) { camp_html_display_error($translator->trans("You do not have the right to manage plugins.", array(), 'plugins')); exit; } if (Input::Get('save')) { if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } $p_plugins = Input::Get('p_plugins', 'array'); $p_enabled = Input::Get('p_enabled', 'array'); // delete from DB those which were uninstalled foreach (CampPlugin::getAll() as $CampPlugin) { if (!array_key_exists($CampPlugin->getName(), $p_plugins)) { if (strpos($CampPlugin->getName(), '/') !== false) { continue; } $CampPlugin->delete(); } } foreach ($p_plugins as $plugin => $oldversion) { $CampPlugin = new CampPlugin($plugin); // installed version, if exists $currentVersion = $CampPlugin->getFsVersion(); if ($p_enabled && array_key_exists($plugin, $p_enabled) && $p_enabled[$plugin]) { if ($CampPlugin->exists()) { if ($CampPlugin->getDbVersion() != $currentVersion) { // update plugin $CampPlugin->delete(); $CampPlugin->create($plugin, $currentVersion); $CampPlugin->update(); $CampPlugin->enable(); // update autoload exec('php '.$GLOBALS['g_campsiteDir'].'/scripts/newscoop.php autoload:update'); } else { // just enable plugin $CampPlugin->enable(); } } else { // install + enable not previously installed plugin $CampPlugin->create($plugin, $currentVersion); $CampPlugin->install(); $CampPlugin->enable(); // update autoload exec('php '.$GLOBALS['g_campsiteDir'].'/scripts/newscoop.php autoload:update'); } } else { $CampPlugin->disable(); } } $redirector = $this->getHelper('redirector'); $redirector->gotoSimple('manage.php', 'plugins', 'admin'); } if (Input::Get('upload_package')) { $file = $_FILES['package']; if ($Plugin = CampPlugin::extractPackage($file['tmp_name'], $log)) { $success = $translator->trans('The plugin $1 was sucessfully installed.', array('$1' => $Plugin->getName()), 'plugins'); } else { $error = $log; } //$Plugin->enable(); } if (Input::Get('p_uninstall')) { $Plugin = new CampPlugin(Input::Get('p_plugin', 'string')); $Plugin->uninstall(); } if( count($infos = CampPlugin::GetPluginsInfo()) > 0 ) { // check if update was needed CampPlugin::GetPluginsInfo(false, true); if ($needsUpdate = CampPlugin::GetNeedsUpdate()) { camp_html_add_msg($translator->trans("Some plugins have to be updated. Please press the save button.", array(), 'plugins')); } } else { camp_html_add_msg($translator->trans("You have no installed plugins.", array(), 'plugins')); } $crumbs = array(); $crumbs[] = array($translator->trans("Plugins"), ""); $crumbs[] = array($translator->trans("Manage", array(), 'plugins'), ""); echo camp_html_breadcrumbs($crumbs); camp_html_display_msgs(); ?>

    /add.png" BORDER="0" alt="trans('Add new image', array(), 'plugins'); ?>"> trans('Upload Plugin', array(), 'plugins'); ?>  

    0) { ?>

    class="list_row_even"class="list_row_odd">
    trans("Name"); ?> trans("Version", array(), 'plugins'); ?> trans("Description"); ?> trans("Enabled", array(), 'plugins'); ?> trans("Uninstall", array(), 'plugins'); ?>
      > /delete.png" BORDER="0" ALT="trans('Delete plugin', array(), 'plugins')?>" TITLE="trans('Delete plugin', array(), 'plugins') ?>">
    • trans('No plugins found.', array(), 'plugins'); ?>
    ================================================ FILE: newscoop/admin-files/pub/add_alias.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManagePub')) { camp_html_display_error($translator->trans("You do not have the right to manage publications.", array(), 'pub')); exit; } $Pub = Input::Get('Pub', 'int'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($Pub); $crumbs = array($translator->trans("Publication Aliases", array(), 'pub') => "aliases.php?Pub=$Pub"); camp_html_content_top($translator->trans("Add new alias", array(), 'pub'), array("Pub" => $publicationObj), true, false, $crumbs); camp_html_display_msgs(); ?>

    trans("Add new alias", array(), 'pub'); ?>
    trans("Name"); ?>:

    ================================================ FILE: newscoop/admin-files/pub/aliases.php ================================================ getService('translator'); $Pub = Input::Get('Pub', 'int'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($Pub); $aliases = Alias::GetAliases(null, $Pub); camp_html_content_top($translator->trans("Publication Aliases", array(), 'pub'), array("Pub" => $publicationObj)); if ($g_user->hasPermission("ManagePub")) { ?>

    /add.png" BORDER="0"> trans("Add new alias", array(), 'pub'); ?>

    hasPermission("ManagePub")) { ?> class="list_row_even"class="list_row_odd"> hasPermission("ManagePub")) { ?>
    trans("Alias (click to edit)", array(), 'pub'); ?> trans("Delete"); ?>
    hasPermission("ManagePub")) { ?>getName())); ?>hasPermission("ManagePub")) { ?> getDefaultAliasId() != $alias->getId()) { ?> /delete.png" BORDER="0" ALT="trans('Delete alias $1', array('$1' => htmlspecialchars($alias->getName())), 'pub'); ?>" TITLE="trans('Delete alias $1', array('$1' => htmlspecialchars($alias->getName())), 'pub'); ?>" >
    ================================================ FILE: newscoop/admin-files/pub/do_add_alias.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManagePub')) { camp_html_display_error($translator->trans("You do not have the right to manage publications.", array(), 'pub')); exit; } $cPub = Input::Get('cPub', 'int'); $cName = trim(Input::Get('cName')); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($cPub); $backLink = "/$ADMIN/pub/add_alias.php?Pub=$cPub"; $correct = true; $created = false; $errorMsgs = array(); if (empty($cName)) { $correct = false; $errorMsgs[] = $translator->trans('You must fill in the $1 field.', array('$1' => 'Name')); } $aliases = 0; if ($correct) { $aliasDups = count(Alias::GetAliases(null, null, $cName)); if ($aliasDups <= 0) { $newAlias = new Alias(); $created = $newAlias->create(array('Name' => "$cName", "IdPublication" => "$cPub")); if ($created) { $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('publication'); camp_html_goto_page("/$ADMIN/pub/aliases.php?Pub=$cPub"); } } else { $errorMsgs[] = $translator->trans('Another alias with the same name exists already.', array(), 'pub'); } } if (!$created && !$correct) { $errorMsgs[] = $translator->trans('The site alias $1 could not be added.', array('$1' => ''.$cName.''), 'pub'); } $crumbs = array($translator->trans("Publication Aliases", array(), 'pub') => "aliases.php?Pub=$cPub"); camp_html_content_top($translator->trans("Adding new alias", array(), 'pub'), array("Pub" => $publicationObj), true, false, $crumbs); ?>

    trans("Adding new alias", array(), 'pub'); ?>
  • ================================================ FILE: newscoop/admin-files/pub/do_del_alias.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManagePub')) { camp_html_display_error($translator->trans("You do not have the right to manage publications.", array(), 'pub')); exit; } $Pub = Input::Get('Pub', 'int', 0); $Alias = Input::Get('Alias', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($Pub); $aliasObj = new Alias($Alias); $errorMsgs = array(); if ($publicationObj->getDefaultAliasId() != $Alias) { $aliasName = $aliasObj->getName(); $deleted = $aliasObj->delete(); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('publication'); if ($deleted) { camp_html_goto_page("/$ADMIN/pub/aliases.php?Pub=$Pub"); } else { $errorMsgs[] = $translator->trans('The alias $1 could not be deleted.', array('$1' => ''.$aliasObj->getName().''), 'pub'); } } else { $errorMsgs[] = $translator->trans('$1 is the default publication alias, it can not be deleted.', array('$1' => ''.$aliasObj->getName().''), 'pub'); } $crumbs = array($translator->trans("Publication Aliases", array(), 'pub') => "aliases.php?Pub=$Pub"); camp_html_content_top($translator->trans("Deleting alias", array(), 'pub'), array("Pub" => $publicationObj), true, false, $crumbs); ?>

    trans("Deleting alias", array(), 'pub'); ?>
  • ================================================ FILE: newscoop/admin-files/pub/do_edit_alias.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } // Check permissions if (!$g_user->hasPermission('ManagePub')) { camp_html_display_error($translator->trans("You do not have the right to manage publications.", array(), 'pub')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int'); $f_alias_id = Input::Get('f_alias_id', 'int'); $f_name = trim(Input::Get('f_name')); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($f_publication_id); $correct = true; $errorMsgs = array(); if (empty($f_name)) { $correct = false; $errorMsgs[] = $translator->trans('You must fill in the $1 field.', array('$1' => 'Name')); } $alias = new Alias($f_alias_id); $aliases = 0; if ($correct) { if ($alias->getName() != $f_name) { $aliasDups = count(Alias::GetAliases(null, null, $f_name)); if ($aliasDups <= 0) { $success = $alias->setName($f_name); } else { $errorMsgs[] = $translator->trans('Another alias with the same name exists already.', array(), 'pub'); $correct = false; } } } if ($correct) { $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('publication'); camp_html_goto_page("/$ADMIN/pub/aliases.php?Pub=$f_publication_id&Alias=$f_alias_id"); exit; } else { $errorMsgs[] = $translator->trans('The site alias $1 could not be modified.', array('$1' => ''.$alias->getName().'')); } $crumbs = array($translator->trans("Publication Aliases", array(), 'pub') => "aliases.php?Pub=$f_publication_id"); camp_html_content_top($translator->trans("Editing alias", array(), 'pub'), array("Pub" => $publicationObj), true, false, $crumbs); ?>

    trans("Editing alias", array(), 'pub'); ?>
  • ================================================ FILE: newscoop/admin-files/pub/edit_alias.php ================================================ getService('translator'); // Check permissions if (!$g_user->hasPermission('ManagePub')) { camp_html_display_error($translator->trans("You do not have the right to manage publications.", array(), 'pub')); exit; } $f_publication_id = Input::Get('Pub', 'int'); $f_alias_id = Input::Get('Alias', 'int'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($f_publication_id); $alias = new Alias($f_alias_id); $crumbs = array($translator->trans("Publication Aliases", array(), 'pub') => "aliases.php?Pub=$f_publication_id"); camp_html_content_top($translator->trans("Edit alias", array(), 'pub'), array("Pub" => $publicationObj), true, false, $crumbs); camp_html_display_msgs(); ?>

    trans("Edit alias", array(), 'pub'); ?>
    trans("Name"); ?>:

    ================================================ FILE: newscoop/admin-files/pub/pub_common.php ================================================ getService('translator'); $publications = Publication::GetPublications($p_publicationName); if (count($publications) > 0) { $pubObj = array_pop($publications); $pubLink = "getPublicationId().'">'. $pubObj->getName() .""; $msg = $translator->trans("The publication name you specified conflicts with publication $1.", array('$1' => $pubLink), 'pub'); camp_html_add_msg($msg); } } /** * Check if the alias given is already in use. If so, a user error message * is created. * * @param mixed $p_alias * Can be a string or an int. * @return void */ function camp_is_alias_conflicting($p_alias) { global $ADMIN; $translator = \Zend_Registry::get('container')->getService('translator'); if (!is_numeric($p_alias)) { // The alias given is a name, which means it doesnt exist yet. // Check if the name conflicts with any existing alias names. $aliases = Alias::GetAliases(null, null, $p_alias); $alias = array_pop($aliases); if ($alias) { $pubId = $alias->getPublicationId(); $pubObj = new Publication($pubId); $pubLink = "". $pubObj->getName() .""; $msg = $translator->trans("The publication alias you specified conflicts with publication '$1'.", array('$1' => $pubLink), 'pub'); camp_html_add_msg($msg); } } else { // The alias given is a number, which means it already exists. // Check if the alias ID is already in use by another publication. $aliases = Alias::GetAliases($p_alias); $alias = array_pop($aliases); if ($alias) { $pubs = Publication::GetPublications(null, $alias->getId()); if (count($pubs) > 0) { $pubObj = array_pop($pubs); $pubLink = "getPublicationId().'">'. $pubObj->getName() .""; $msg = $translator->trans("The publication alias you specified conflicts with publication '$1'.", array('$1' => $pubLink), 'pub'); camp_html_add_msg($msg); } } } } ?> ================================================ FILE: newscoop/admin-files/sections/add.php ================================================ getService('translator'); if (!$g_user->hasPermission('ManageSection')) { camp_html_display_error($translator->trans('You do not have the right to add sections.', array(), 'sections')); exit; } $f_publication_id = Input::Get('Pub', 'int', 0); $f_issue_number = Input::Get('Issue', 'int', 0); $f_language_id = Input::Get('Language', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $newSectionNumber = Section::GetUnusedSectionNumber($f_publication_id, $f_issue_number); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj); camp_html_content_top($translator->trans('Add new section', array(), 'sections'), $topArray, true, true, array($translator->trans("Sections") => "/$ADMIN/sections/?Pub=$f_publication_id&Issue=$f_issue_number&Language=$f_language_id")); $controller->view->headTitle($translator->trans('Add new section', array(), 'sections').' - Newscoop Admin', 'SET'); $languageObj = new Language($f_language_id); if (!is_object($languageObj)) { $languageObj = new Language(1); } $editorLanguage = camp_session_get('TOL_Language', $languageObj->getCode()); editor_load_tinymce('f_description', $g_user, 0, $editorLanguage, 'section'); ?>

    trans('Add new section', array(), 'sections'); ?>
    trans('Name'); ?>: trans('Name')."'")); ?>">
    trans('Description'); ?>:
    trans('Number'); ?>: trans('Number')."'")); ?>">
    trans('URL Name', array(), 'sections'); ?>: trans('URL Name', array(), 'sections') . "'")); ?>">

    ================================================ FILE: newscoop/admin-files/sections/del.php ================================================ getService('translator'); if (!$g_user->hasPermission('DeleteSection')) { camp_html_display_error($translator->trans('You do not have the right to delete sections.', array(), 'sections')); exit; } $f_publication_id = Input::Get('Pub', 'int', 0); $f_issue_number = Input::Get('Issue', 'int', 0); $f_language_id = Input::Get('Language', 'int', 0); $f_section_number = Input::Get('Section', 'int', 0); $numArticles = count(Article::GetArticles($f_publication_id, $f_issue_number, $f_section_number, $f_language_id)); $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); $sectionTranslations = Section::GetSections($f_publication_id, $f_issue_number, null, null, $sectionObj->getName(), null); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans('Delete section', array(), 'sections'), $topArray); $controller->view->headTitle($translator->trans('Delete section', array(), 'sections').' - Newscoop Admin', 'SET'); ?>

    trans('There are $1 articles in this section.', array('$1' => ''.$numArticles.''), 'sections'); ?>
    trans('Delete only this section ($1)', array('$1' => $sectionObj->getLanguageName()), 'sections'); ?>
    trans('Delete all translations of this section', array(), 'sections'); ?>
    $sectionTranslation) { echo $sectionTranslation->getLanguageName() . '
    '; } ?>
    trans('Delete all articles written in $1 language from this section', array('$1' => $sectionObj->getLanguageName()), 'sections'); ?>
    trans('Delete all articles and all of their translations', array(), 'sections'); ?>
    trans('Are you sure you want to delete the section $1?', array('$1' => ''.htmlspecialchars($sectionObj->getName()).''), 'sections'); ?>
        

    ================================================ FILE: newscoop/admin-files/sections/do_add.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('ManageSection')) { camp_html_display_error($translator->trans("You do not have the right to add sections.", array(), 'sections')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_name = trim(Input::Get('f_name', 'string', '', true)); $f_description = trim(Input::Get('f_description', '', true)); $f_number = trim(Input::Get('f_number', 'int', 0, true)); $f_url_name = trim(Input::Get('f_url_name', 'string', '', true)); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()), 'sections'), $_SERVER['REQUEST_URI']); exit; } $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $publicationObj = new Publication($f_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } if (!$issueObj->exists()) { camp_html_display_error($translator->trans('No such issue.')); exit; } $correct = true; $created = false; $isValidShortName = camp_is_valid_url_name($f_url_name); $errors = array(); if ($f_name == "") { $correct = false; $errors[] = $translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('Name').'"')); } if ($f_number == 0) { $correct= false; $f_number = ($f_number + 0); $errors[] = $translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('Number').'"')); } if ($f_url_name == "") { $correct = false; $errors[] = $translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('URL Name').'"')); } if (!$isValidShortName && trim($f_url_name) != "") { $correct = false; $errors[] = $translator->trans('The $1 field may only contain letters, digits and underscore (_) character.', array('$1' => '"' . $translator->trans('URL Name', array(), 'sections') . '"')); } $sectionsConstraints = array(new ComparisonOperation('idpublication', new Operator('is'), $f_publication_id), new ComparisonOperation('nrissue', new Operator('is'), $f_issue_number), new ComparisonOperation('number', new Operator('is'), $f_number)); $sections = Section::GetList($sectionsConstraints, null, 0, 0, $sectionsCount, true); if ($sectionsCount > 0) { $correct = false; $errors[] = $translator->trans('The section number $1 was already in use.', array('$1' => $f_number), 'sections'); } if ($correct) { $newSection = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_number); $columns = array(); $columns['Description'] = $f_description; $created = $newSection->create($f_name, $f_url_name, $columns); if ($created) { $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('section'); camp_html_goto_page("/$ADMIN/sections/edit.php?Pub=$f_publication_id&Issue=$f_issue_number&Language=$f_language_id&Section=".$newSection->getSectionNumber()); } } $tmpArray = array('Pub' => $publicationObj, 'Issue' => $issueObj); camp_html_content_top($translator->trans('Adding new section', array(), 'sections'), $tmpArray); ?>

  • trans('The section $1 has been successfuly added.', array('$1' => ''.htmlspecialchars($f_name).''), 'sections'); ?>
  • trans('The section could not be added.', array(), 'sections'); ?>
  • trans('Please check if another section with the same number or URL name does not exist already.', array(), 'sections'); ?>
  • ================================================ FILE: newscoop/admin-files/sections/do_del.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('DeleteSection')) { camp_html_display_error($translator->trans('You do not have the right to delete sections.', array(), 'sections')); exit; } $f_publication_id = Input::Get('f_publication_id', 'int', 0); $f_issue_number = Input::Get('f_issue_number', 'int', 0); $f_language_id= Input::Get('f_language_id', 'int', 0); $f_section_number = Input::Get('f_section_number', 'int', 0); $f_delete_all_section_translations = Input::Get('f_delete_all_section_translations', 'string', '', true); $f_delete_all_articles_translations = Input::Get('f_delete_all_articles_translations', 'string', '', true); $publicationObj = new Publication($f_publication_id); $issueObj = new Issue($f_publication_id, $f_language_id, $f_issue_number); $sectionObj = new Section($f_publication_id, $f_issue_number, $f_language_id, $f_section_number); $sectionName = $sectionObj->getName(); $articles = Article::GetArticles($f_publication_id, $f_issue_number, $f_section_number, $f_language_id); $numArticles = count($articles); $numArticlesDeleted = 0; $f_delete_all_section_translations = ($f_delete_all_section_translations == 'Y') ? true : false; $f_delete_all_articles_translations = ($f_delete_all_articles_translations == 'Y') ? true : false; if ($f_delete_all_section_translations == false) { $numArticlesDeleted = $sectionObj->delete(true, $f_delete_all_articles_translations); $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('section'); } else { $sectionTranslations = Section::GetSections($f_publication_id, $f_issue_number, null, null, $sectionObj->getName(), null); foreach ($sectionTranslations as $key => $sectionTranslation) { $numArticlesDeleted += $sectionTranslation->delete(true, $f_delete_all_articles_translations); } } $offsetVarName = 'SectOffs_'.$f_publication_id.'_'.$f_issue_number.'_'.$f_language_id; $SectOffs = camp_session_get($offsetVarName, 0); $totalSections = Section::GetTotalSections($f_publication_id, $f_issue_number, $f_language_id); if ($SectOffs >= $totalSections) { camp_session_set($offsetVarName, 0); } $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans('Delete section', array(), 'sections'), $topArray); ?>

    trans("Deleting section", array(), 'sections'); ?>
  • trans('The section $1 has been deleted.', array('$1' => ''.htmlspecialchars($sectionName).''), 'sections'); ?>
  • trans('A total of $1 articles were deleted.', array('$1' => ''.$numArticlesDeleted.''), 'sections'); ?>
  • ================================================ FILE: newscoop/admin-files/sections/do_duplicate.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission("ManageSection")) { camp_html_display_error($translator->trans("You do not have the right to add sections.", array(), 'sections')); exit; } if (!$g_user->hasPermission("AddArticle")) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } $f_src_publication_id = Input::Get('f_src_publication_id', 'int', 0); $f_src_issue_number = Input::Get('f_src_issue_number', 'int', 0); $f_src_section_number = Input::Get('f_src_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_dest_publication_id = Input::Get('f_dest_publication_id', 'int', 0); $f_dest_issue_number = Input::Get('f_dest_issue_number', 'int', 0); $radioButton = Input::Get('f_section_chooser', 'string', 'new_section'); if ($radioButton == 'new_section') { $f_dest_section_number = Input::Get('f_dest_section_new_number', 'int', 0, true); } else { $f_dest_section_number = Input::Get('f_dest_section_existing', 'int', 0, true); } $f_dest_section_name = Input::Get('f_dest_section_new_name', 'string', '', true); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } $srcPublicationObj = new Publication($f_src_publication_id); if (!$srcPublicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $srcIssueObj = new Issue($f_src_publication_id, $f_language_id, $f_src_issue_number); if (!$srcIssueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $srcSectionObj = new Section($f_src_publication_id, $f_src_issue_number, $f_language_id, $f_src_section_number); if (!$srcSectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } $correct = ($f_dest_publication_id > 0) && ($f_dest_issue_number > 0) && ($f_dest_section_number > 0); $created = false; if ($correct) { $dstSectionObj = $srcSectionObj->copy($f_dest_publication_id, $f_dest_issue_number, $f_language_id, $f_dest_section_number); if (($radioButton == "new_section") && ($f_dest_section_name != "")) { $dstSectionObj->setName($f_dest_section_name); } $dstPublicationObj = new Publication($f_dest_publication_id); $dstIssueObj = new Issue($f_dest_publication_id, $f_language_id, $f_dest_issue_number); $created = true; $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('section'); camp_html_goto_page("/$ADMIN/sections/duplicate_complete.php?" ."f_src_publication_id=$f_src_publication_id" ."&f_src_issue_number=$f_src_issue_number" ."&f_src_section_number=$f_src_section_number" ."&f_language_id=$f_language_id" ."&f_dest_publication_id=$f_dest_publication_id" ."&f_dest_issue_number=$f_dest_issue_number" ."&f_dest_section_number=$f_dest_section_number"); } else { $topArray = array('Pub' => $srcPublicationObj, 'Issue' => $srcIssueObj, 'Section' => $srcSectionObj); camp_html_content_top($translator->trans('Duplicating section', array(), 'sections'), $topArray); } ?>

    trans("Duplicating section", array(), 'sections'); ?>
    "; echo $translator->trans('Invalid parameters received'); echo "\n"; } else { ?>
  • trans('The section $1 could not be duplicated', array('$1' => ''.htmlspecialchars($srcSectionObj->getName()).''), 'sections'); ?>
  • ================================================ FILE: newscoop/admin-files/sections/do_edit.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } if (!$g_user->hasPermission('ManageSection')) { camp_html_display_error($translator->trans("You do not have the right to add sections.", array(), 'sections')); exit; } $Pub = Input::Get('Pub', 'int', 0); $Issue = Input::Get('Issue', 'int', 0); $Section = Input::Get('Section', 'int', 0); $Language = Input::Get('Language', 'int', 0); $cShortName = trim(Input::Get('cShortName', 'string')); $cDescription = trim(Input::Get('cDescription')); $cSectionTplId = Input::Get('cSectionTplId', 'string', 0); $cArticleTplId = Input::Get('cArticleTplId', 'string', 0); $cName = Input::Get('cName'); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $issueObj = new Issue($Pub, $Language, $Issue); $publicationObj = new Publication($Pub); $sectionObj = new Section($Pub, $Issue, $Language, $Section); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } if (!$issueObj->exists()) { camp_html_display_error($translator->trans('No such issue.')); exit; } $correct = true; $modified = false; $errors = array(); if ($cName == "") { camp_html_add_msg($translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('Name').'"'))); } if ($cShortName == "") { camp_html_add_msg($translator->trans('You must fill in the $1 field.', array('$1' => '"'.$translator->trans('URL Name', array(), 'sections').'"'))); } $isValidShortName = camp_is_valid_url_name($cShortName); if (!$isValidShortName) { camp_html_add_msg($translator->trans('The $1 field may only contain letters, digits and underscore (_) character.', array('$1' => '"' . $translator->trans('URL Name', array(), 'sections') . '"'))); } $editUrl = "/$ADMIN/sections/edit.php?Pub=$Pub&Issue=$Issue&Language=$Language&Section=$Section"; if (!camp_html_has_msgs()) { $modified = true; $modified &= $sectionObj->setName($cName); $modified &= $sectionObj->setDescription($cDescription); //@New theme management $resourceId = new ResourceId('Section/Edit'); $outputSettingSectionService = $resourceId->getService(IOutputSettingSectionService::NAME); $outputService = $resourceId->getService(IOutputService::NAME); $sectionService = $resourceId->getService(ISectionService::NAME); $syncRsc = $resourceId->getService(ISyncResourceService::NAME); $newOutputSetting = false; $dSection = $sectionService->getById($sectionObj->getSectionId()); $outSetSections = $outputSettingSectionService->findBySection($dSection); if(count($outSetSections) > 0){ $outSetSection = $outSetSections[0]; } else { $outSetSection = new OutputSettingsSection(); $outSetSection->setOutput($outputService->findByName('Web')); $outSetSection->setSection($dSection); $newOutputSetting = true; } if($cSectionTplId != null && $cSectionTplId != '0'){ $outSetSection->setSectionPage($syncRsc->getResource('sectionPage', $cSectionTplId)); } else { $outSetSection->setSectionPage(null); } if($cArticleTplId != null && $cArticleTplId != '0'){ $outSetSection->setArticlePage($syncRsc->getResource('articlePage', $cArticleTplId)); } else { $outSetSection->setArticlePage(null); } //@New theme management $conflictingSection = array_pop(Section::GetSections($Pub, $Issue, $Language, $cShortName, null, null, true)); if (is_object($conflictingSection) && ($conflictingSection->getSectionNumber() != $Section)) { $conflictingSectionLink = "/$ADMIN/sections/edit.php?Pub=$Pub&Issue=$Issue&Language=$Language&Section=".$conflictingSection->getSectionNumber(); $msg = $translator->trans('The URL name must be unique for all sections in this issue.
    The URL name you specified ($1) conflicts with section $2$3. $4$5', array( '$1' => $cShortName, '$2' => "", '$3' => $conflictingSection->getSectionNumber(), '$4' => htmlspecialchars($conflictingSection->getName()), '$5' => ""), 'sections'); camp_html_add_msg($msg); // placeholder for localization string - we might need this later. // $translator->trans("The section could not be changed."); } else { $modified &= $sectionObj->setUrlName($cShortName); //@New theme management if($newOutputSetting){ $outputSettingSectionService->insert($outSetSection); } else { $outputSettingSectionService->update($outSetSection); } //@New theme management camp_html_add_msg($translator->trans("Section updated", array(), 'sections'), "ok"); } $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $cacheService->clearNamespace('section'); } camp_html_goto_page($editUrl); ?> ================================================ FILE: newscoop/admin-files/sections/duplicate.php ================================================ getService('translator'); if (!$g_user->hasPermission("ManageSection")) { camp_html_display_error($translator->trans("You do not have the right to add sections.", array(), 'sections')); exit; } if (!$g_user->hasPermission("AddArticle")) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } $f_src_publication_id = Input::Get('Pub', 'int', 0); $f_src_issue_number = Input::Get('Issue', 'int', 0); $f_src_section_number = Input::Get('Section', 'int', 0); $f_language_id = Input::Get('Language', 'int', 0); $f_dest_publication_id = Input::Get('f_dest_publication_id', 'int', 0, true); $f_dest_issue_number = Input::Get('f_dest_issue_number', 'string', 0, true); $BackLink = Input::Get('Back', 'string', "/$ADMIN/sections/index.php?Pub=$f_src_publication_id&Issue=$f_src_issue_number&Language=$f_language_id", true); if (!Input::IsValid()) { camp_html_display_error($translator->trans("Invalid input: $1", array('$1' => Input::GetErrorString())), $BackLink); exit; } $publicationObj = new Publication($f_src_publication_id); if (!$publicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $issueObj = new Issue($f_src_publication_id, $f_language_id, $f_src_issue_number); if (!$issueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $sectionObj = new Section($f_src_publication_id, $f_src_issue_number, $f_language_id, $f_src_section_number); if (!$sectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } $allPublications = Publication::GetPublications(); if (count($allPublications) == 1) { $f_dest_publication_id = $f_src_publication_id; $destPublicationObj = camp_array_peek($allPublications); } $allIssues = array(); if ($f_dest_publication_id > 0) { // Get the most recent 50 Issues...if they want something farther back, we are in trouble. $sqlOptions = array("LIMIT" => 50, "ORDER BY" => array("Number" => "DESC")); $allIssues = Issue::GetIssues($f_dest_publication_id, $f_language_id, null, null, null, false, $sqlOptions, true); if (count($allIssues) == 1) { $f_dest_issue_number = $allIssues[0]->getIssueNumber(); } } $allSections = array(); $destIssueObj = null; if ($f_dest_issue_number > 0) { $destIssueObj = new Issue($f_dest_publication_id, $sectionObj->getLanguageId(), $f_dest_issue_number); $allSections = Section::GetSections($f_dest_publication_id, $f_dest_issue_number, $sectionObj->getLanguageId(), null, null, null, true); } $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans('Duplicate section', array(), 'sections'), $topArray, true, true); $controller->view->headTitle($translator->trans('Duplicate section', array(), 'sections').' - Newscoop Admin', 'SET'); ?>
    /left_arrow.png" BORDER="0"> trans("Section List"); ?> /left_arrow.png" BORDER="0"> trans("Section"); ?>: getName())); ?>

    trans("Duplicate Section:", array(), 'sections'); ?> getName())); ?>
     
    trans("Select destination section:", array(), 'sections'); ?>
    trans('Publication'); ?>: 0) { if (count($allPublications) == 1) { echo htmlspecialchars($destPublicationObj->getName()); } else { ?>
    trans('Issue'); ?>: 0) && (count($allIssues) > 0)) { if (count($allIssues) == 1) { echo htmlspecialchars($destIssueObj->getName()); } else { ?>
    trans("Warning", array(), 'sections'); echo ':'; echo $translator->trans("The destination issue is the same as the source issue.", array(), 'sections'); ?>
    disabled > trans("Existing Section", array(), 'sections'); ?>:
    trans("OR", array(), 'sections'); ?>
    disabled > trans("New Section", array(), 'sections'); ?>:
    trans("Number"); ?>: disabled onclick="this.form.f_section_chooser[1].checked = true;">
     
    trans("Name"); ?>: disabled onclick="this.form.section_chooser[1].checked = true;">
    " >

    ================================================ FILE: newscoop/admin-files/sections/duplicate_complete.php ================================================ getService('translator'); if (!$g_user->hasPermission("ManageSection")) { camp_html_display_error($translator->trans("You do not have the right to add sections.", array(), 'sections')); exit; } if (!$g_user->hasPermission("AddArticle")) { camp_html_display_error($translator->trans("You do not have the right to add articles.")); exit; } $f_src_publication_id = Input::Get('f_src_publication_id', 'int', 0); $f_src_issue_number = Input::Get('f_src_issue_number', 'int', 0); $f_src_section_number = Input::Get('f_src_section_number', 'int', 0); $f_language_id = Input::Get('f_language_id', 'int', 0); $f_dest_publication_id = Input::Get('f_dest_publication_id', 'int', 0); $f_dest_issue_number = Input::Get('f_dest_issue_number', 'int', 0); $f_dest_section_number = Input::Get('f_dest_section_number', 'int', 0); if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString()))); exit; } $srcPublicationObj = new Publication($f_src_publication_id); if (!$srcPublicationObj->exists()) { camp_html_display_error($translator->trans('Publication does not exist.')); exit; } $srcIssueObj = new Issue($f_src_publication_id, $f_language_id, $f_src_issue_number); if (!$srcIssueObj->exists()) { camp_html_display_error($translator->trans('Issue does not exist.')); exit; } $srcSectionObj = new Section($f_src_publication_id, $f_src_issue_number, $f_language_id, $f_src_section_number); if (!$srcSectionObj->exists()) { camp_html_display_error($translator->trans('Section does not exist.')); exit; } $dstPublicationObj = new Publication($f_dest_publication_id); $dstIssueObj = new Issue($f_dest_publication_id, $f_language_id, $f_dest_issue_number); $dstSectionObj = new Section($f_dest_publication_id, $f_dest_issue_number, $f_language_id, $f_dest_section_number); $topArray = array('Pub' => $srcPublicationObj, 'Issue' => $srcIssueObj, 'Section' => $srcSectionObj); camp_html_content_top($translator->trans('Duplicating section', array(), 'sections'), $topArray); ?>

    trans("Duplicating section", array(), 'sections'); ?>
    trans('Section $1 has been duplicated to $2. $3 of $4', array('$1' => ''.$srcSectionObj->getName().'', '$2' => ''.$dstSectionObj->getIssueNumber().'', '$3' => ''.$dstIssueObj->getName().' ('.$dstIssueObj->getLanguageName().')', '$4' => ''.$dstPublicationObj->getName().''), 'sections'); ?>

    ================================================ FILE: newscoop/admin-files/sections/edit.php ================================================ getService('translator'); if (!$g_user->hasPermission('ManageSection')) { camp_html_display_error($translator->trans("You do not have the right to modify sections.", array(), 'sections')); exit; } global $sectionObj; $Pub = Input::Get('Pub', 'int', 0); $Issue = Input::Get('Issue', 'int', 0); $Language = Input::Get('Language', 'int', 0); $Section = Input::Get('Section', 'int', 0); $publicationObj = new Publication($Pub); $issueObj = new Issue($Pub, $Language, $Issue); $sectionObj = new Section($Pub, $Issue, $Language, $Section); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj, 'Section' => $sectionObj); camp_html_content_top($translator->trans("Configure section", array(), 'sections'), $topArray); $controller->view->headTitle($translator->trans('Configure section', array(), 'sections').' - Newscoop Admin', 'SET'); $url_args1 = "Pub=$Pub&Issue=$Issue&Language=$Language"; $url_args2 = $url_args1."&Section=$Section"; $languageObj = new Language($Language); if (!is_object($languageObj)) { $languageObj = new Language(1); } //$editorLanguage = camp_session_get('TOL_Language', $languageObj->getCode()); $editorLanguage = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : $languageObj->getCode(); editor_load_tinymce('cDescription', $g_user, 0, $editorLanguage, 'section'); //@New theme management $resourceId = new ResourceId('Section/Edit'); $themeManagementService = $resourceId->getService(IThemeManagementService::NAME_1); $outputSettingIssueService = $resourceId->getService(IOutputSettingIssueService::NAME); $outputSettingSectionService = $resourceId->getService(IOutputSettingSectionService::NAME); $outSetIssues = $outputSettingIssueService->findByIssue($issueObj->getIssueId()); $themePath = null; $tplSectionPath = null; $tplArticlePath = null; if(count($outSetIssues) > 0){ $outSetIssue = $outSetIssues[0]; $themePath = $outSetIssue->getThemePath()->getPath(); $outSetSections = $outputSettingSectionService->findBySection($sectionObj->getSectionId()); if(count($outSetSections) > 0){ $outSetSection = $outSetSections[0]; if($outSetSection->getSectionPage() != null){ $tplSectionPath = $outSetSection->getSectionPage()->getPath(); } if($outSetSection->getArticlePage() != null){ $tplArticlePath = $outSetSection->getArticlePage()->getPath(); } } } $issueHasTheme = $themePath != null; if($issueHasTheme){ $allTemplates = $themeManagementService->getTemplates($themePath); } else { $allTemplates = array(); } //@New theme management ?>
    /left_arrow.png" border="0" /> trans("Section List"); ?> trans("Go To Articles", array(), 'sections'); ?> /go_to.png" border="0" />

    /add.png" border="0" /> trans("Add new section", array(), 'sections'); ?> /duplicate.png" border="0" /> trans("Duplicate"); ?> /delete.png" border="0" /> trans("Delete"); ?>

    hasPermission('ManageSectionTemplates')) { ?>
    trans("Configure section", array(), 'sections'); ?>
    trans("Number"); ?>: getSectionNumber()); ?>
    trans("Name"); ?>:
    trans("URL Name", array(), 'sections'); ?>: trans('URL Name', array(), 'sections') . "'")); ?>"/>
    trans("Description"); ?>:
    trans("Default templates"); ?>
    trans("Section Template"); ?>:
    trans("Article Template"); ?>:
    trans("You have to assign a theme to the issue", array(), 'sections');?>
    trans("before you can configure the section templates.", array(), 'sections');?>
    $sectionObj ) ); ?> getService('newscoop.plugins.service') ->renderPluginHooks('newscoop_admin.interface.section.edit', null, array( 'section' => $sectionObj )); ?>

    ================================================ FILE: newscoop/admin-files/sections/index.php ================================================ getService('translator'); $Pub = Input::Get('Pub', 'int', 0); $Issue = Input::Get('Issue', 'int', 0); $Language = Input::Get('Language', 'int', 0); $SectOffs = camp_session_get("SectOffs_".$Pub."_".$Issue."_".$Language, 0); if ($SectOffs < 0) { $SectOffs = 0; } $ItemsPerPage = 15; if (!Input::IsValid()) { camp_html_display_error($translator->trans('Invalid input: $1', array('$1' => Input::GetErrorString())), $_SERVER['REQUEST_URI']); exit; } $publicationObj = new Publication($Pub); $issueObj = new Issue($Pub, $Language, $Issue); $allSections = Section::GetSections($Pub, $Issue, $Language, null, null, array('ORDER BY' => 'Number', 'LIMIT' => array('START' => $SectOffs, 'MAX_ROWS' => $ItemsPerPage)), true); $totalSections = Section::GetTotalSections($Pub, $Issue, $Language); $pager = new SimplePager($totalSections, $ItemsPerPage, "SectOffs_".$Pub."_".$Issue."_".$Language, "index.php?Pub=$Pub&Issue=$Issue&Language=$Language&"); $topArray = array('Pub' => $publicationObj, 'Issue' => $issueObj); camp_html_content_top($translator->trans('Section List'), $topArray); $controller->view->headTitle($translator->trans('Section List').' - Newscoop Admin', 'SET'); ?> hasPermission('ManageSection')) { ?>
    /left_arrow.png" BORDER="0"> trans("Issue List"); ?> /add.png" BORDER="0"> trans("Add new section", array(), 'sections'); ?>

    0) { $color=0; ?> hasPermission('ManageSection')) { ?> hasPermission('ManageSection') && $g_user->hasPermission('AddArticle')) { ?> hasPermission('DeleteSection')) { ?> getPublicationId(), $section->getIssueNumber(), $section->getSectionNumber(), $section->getLanguageId(), null, true); $whereOptions = array("Published='Y'"); $numberOfPublishedArticles = Article::GetArticles($section->getPublicationId(), $section->getIssueNumber(), $section->getSectionNumber(), $section->getLanguageId(), null, true, $whereOptions); ?> class="list_row_even"class="list_row_odd"> hasPermission('ManageSection')) { ?> hasPermission('ManageSection') && $g_user->hasPermission('AddArticle')) { ?> hasPermission('DeleteSection')) { ?>
    trans("Number"); ?> trans("Name
    (click to see articles)", array(), 'sections'); ?>
    trans("No. of Articles
    (Published/Total)", array(), 'sections'); ?>
    trans("URL Name", array(), 'sections'); ?> trans("Configure"); ?> trans("Duplicate"); ?> trans("Delete"); ?>
    getSectionNumber()); ?> getName())); ?> getUrlName())); ?> /configure.png" alt="trans("Configure"); ?>" title="trans("Configure"); ?>" border="0"> /duplicate.png" alt="trans('Duplicate'); ?>" title="trans('Duplicate'); ?>" border="0"> /delete.png" BORDER="0" ALT="trans('Delete section $1', array('$1' => htmlspecialchars($section->getName())), 'sections'); ?>" TITLE="trans('Delete section $1', array('$1' => htmlspecialchars($section->getName())), 'sections'); ?>">
    render(); ?>

  • trans('No sections'); ?>
  • ================================================ FILE: newscoop/admin-files/sections/section_common.php ================================================ ================================================ FILE: newscoop/admin-files/set-author.php ================================================ getService('translator'); if (!$g_user->hasPermission('ChangeArticle') || !$g_user->hasPermission('ManageIssue')) { camp_html_display_error($translator->trans('You must have the permissions to add/change issues and articles in order to set the author for all articles.', array(), 'home')); exit; } $f_src_author_field = Input::Get('f_src_author_field', 'string', ''); if (!empty($f_src_author_field)) { $fields = ArticleTypeField::FetchFields($f_src_author_field, null, 'text', false, false, false, true, true); if (count($fields) == 0) { camp_html_add_msg($translator->trans("Invalid or empty field $1. You must select a valid dynamic field.", array('$1' => $f_src_author_field), 'home')); } foreach ($fields as $field) { camp_set_author($field, $errors); if (count($errors) == 0) { camp_html_add_msg($translator->trans("The author was set successfuly for articles of type $1 from the field $2.", array('$1' => $field->getArticleType(), '$2' => $field->getPrintName()), 'home'), 'ok'); } else { camp_html_add_msg($translator->trans("There were errors setting the author for articles of type $1 from the field $2.", array('$1' => $field->getArticleType(), '$2' => $field->getPrintName()), 'home')); } foreach ($errors as $error) { camp_html_add_msg($error); } } camp_html_display_msgs(); } $availableFields = ArticleTypeField::FetchFields(null, null, 'text', false, false, false, true, true); ?>
    trans("Select the field from which to generate the author", array(), 'home'); ?>:
    ">
    ================================================ FILE: newscoop/admin-files/universal-list/index.php ================================================ getService('translator'); $f_publication_id = Input::Get('f_publication_id', 'int', null); $f_issue_number = Input::Get('f_issue_number', 'int', null); $f_section_number = Input::Get('f_section_number', 'int', null); $f_language_id = Input::Get('f_language_id', 'int', 1); if (isset($_SESSION['f_language_selected'])) { $f_old_language_selected = (int)$_SESSION['f_language_selected']; } else { $f_old_language_selected = 0; } $f_language_selected = (int)camp_session_get('f_language_selected', 0); camp_html_content_top($translator->trans('Search'), NULL); $controller->view->headTitle($translator->trans('Search').' - Newscoop Admin', 'SET'); // set up $articlelist = new ArticleList(); $articlelist->setPublication($f_publication_id); $articlelist->setIssue($f_issue_number); $articlelist->setSection($f_section_number); $articlelist->setLanguage($f_language_id); $articlelist->setColVis(TRUE); $articlelist->setSearch(TRUE); // render $articlelist->renderFilters(); $articlelist->renderActions(); $articlelist->render(); camp_html_copyright_notice(); ?> ================================================ FILE: newscoop/admin-files/users/access_form.php ================================================ getService('translator'); $uType = 'Staff'; compute_user_rights($g_user, $canManage, $canDelete); if (!$canManage) { $error = $translator->trans("You do not have the right to change user account permissions.", array(), 'users'); camp_html_display_error($error); exit; } $userId = Input::Get('User', 'int', 0); if ($userId > 0) { $editUser = new User($userId); if ($editUser->getUserName() == '') { camp_html_display_error($translator->trans('No such user account.', array(), 'users')); exit; } } else { camp_html_display_error($translator->trans('No such user account.', array(), 'users')); exit; } $rights = camp_get_permission_list(); ?> $group) { $no_rights += sizeof($group); foreach ($group as $right_name => $right_text) { if ($editUser->hasPermission($right_name)) { $rightsList[] = "'" . $checkboxPrefix . $counter . "'"; } $counter++; } } $jsRightsArray = implode(',', $rightsList); ?> $group) { ?> $right_text) { $rowClass = ($color) ? 'list_row_even' : 'list_row_odd'; $color = !$color; ?>
    --- ---
    hasPermission($right_name)) { p("CHECKED"); } ?>>
    ================================================ FILE: newscoop/admin-files/users/authors.php ================================================ getService('translator'); // TODO: permissions if (!is_writable($Campsite['IMAGE_DIRECTORY'])) { camp_html_add_msg($translator->trans('Unable to add new image, target directory is not writable.', array(), 'users')); camp_html_add_msg(camp_get_error_message(CAMP_ERROR_WRITE_DIR, $Campsite['IMAGE_DIRECTORY'])); camp_html_goto_page("/$ADMIN/"); exit; } if (!$g_user->hasPermission('EditAuthors')) { camp_html_display_error($translator->trans('You do not have the permission to change authors.', array(), 'users')); exit; } $id = Input::Get('id', 'int', -1); // Delete author $del_id = Input::Get('del_id', 'int', -1); if ($del_id > -1) { $author = new Author($del_id); if ($author->delete()) { camp_html_add_msg($translator->trans('Author deleted.', array(), 'users'), 'ok'); } } // Add new author type $add_author_type = Input::Get('add_author', 'string', null); if ($add_author_type !== null) { $authorTypeObj = new AuthorType(); if ($authorTypeObj->create($add_author_type) === true) { camp_html_add_msg($translator->trans('Author type added.', array(), 'users'), 'ok'); } else { camp_html_add_msg($translator->trans('Cannot add author type, this type already exists.', array(), 'users')); } } // Delete author type $del_id_type = Input::Get('del_id_type', 'int', -1); if ($del_id_type > -1) { $authorTypeObj = new AuthorType($del_id_type); if ($authorTypeObj->delete()) { camp_html_add_msg($translator->trans('Author type removed.', array(), 'users'), 'ok'); } else { camp_html_add_msg($translator->trans('Cannot remove author type.', array(), 'users')); } } // Delete author alias $del_id_alias = Input::Get('del_id_alias', 'int', -1); if ($del_id_alias > -1) { $authorAliasObj = new AuthorAlias($del_id_alias); if ($authorAliasObj->delete()) { camp_html_add_msg($translator->trans('Author alias removed.', array(), 'users'), 'ok'); } else { camp_html_add_msg($translator->trans('Cannot remove author alias.', array(), 'users')); } } // Important! Trim spaces and replace multiple ones by space $first_name = preg_replace('/\s+/', ' ', trim(Input::Get('first_name'))); $last_name = preg_replace('/\s+/', ' ', trim(Input::Get('last_name'))); $can_save = false; if ($id > -1 && strlen($first_name) > 0 && strlen($last_name) > 0) { $can_save = true; $tmpAuthor = new Author(implode(' ', array($first_name, $last_name))); if ($id == 0 && $tmpAuthor->exists()) { $can_save = false; camp_html_add_msg($translator->trans('An author with the same full name (combination of first and last name) already exists.', array(), 'users')); } } if ($can_save) { $author = new Author(); if ($id > 0) { $author = new Author($id); $isNewAuthor = false; } else { $author->create(array('first_name' => $first_name, 'last_name' => $last_name)); $isNewAuthor = true; } $uploadFileSpecified = isset($_FILES['file']) && isset($_FILES['file']['name']) && !empty($_FILES['file']['name']); $author->setFirstName($first_name); $author->setLastName($last_name); $author->commit(); // Reset types $types = Input::Get('type', 'array', array()); AuthorAssignedType::ResetAuthorAssignedTypes($author->getId()); foreach ($types as $type) { $author->setType($type); } $author->setSkype(Input::Get('skype')); $author->setJabber(Input::Get('jabber')); $author->setAim(Input::Get('aim')); $author->setEmail(Input::Get('email')); $authorBiography = array(); $authorBiography['biography'] = Input::Get("txt_biography", "string"); $authorBiography['language'] = Input::Get("lang", "int", 0); $authorBiography['first_name'] = Input::Get("lang_first_name"); $authorBiography['last_name'] = Input::Get("lang_last_name"); $author->setBiography($authorBiography); if ($uploadFileSpecified) { $attributes = array(); $image = Image::OnImageUpload($_FILES['file'], $attributes); if (PEAR::isError($image)) { camp_html_add_msg($image->getMessage()); } else { $author->setImage($image->getImageId()); } } $aliases = Input::Get("alias", "array"); if (!empty($aliases)) { $author->setAliases($aliases); } camp_html_add_msg($translator->trans("Author saved.", array(), 'users'),"ok"); } elseif ($del_id_alias < 1 && $id > -1 && !$can_save) { camp_html_add_msg($translator->trans("Please fill at least first name and last name.", array(), 'users')); } if (!$id || $id == -1) { $author = new Author(1); if ($id == -1) { $id = 0; } } $controller->view->headTitle($translator->trans('Authors').' - Newscoop Admin', 'SET'); $crumbs = array(); $crumbs[] = array($translator->trans("Configure"), ""); $crumbs[] = array($translator->trans("Authors"), ""); $breadcrumbs = camp_html_breadcrumbs($crumbs); echo $breadcrumbs; ?>
    • '; echo '' . $translator->trans('Delete author type', array(), 'users') . ''; echo ''; } ?>
    • trans('Add author type', array(), 'users'); ?>:
    trans('Add new Author', array(), 'users'); ?>
    trans('Loading Data', array(), 'users'); ?>...
    ================================================ FILE: newscoop/admin-files/users/authors_ajax/detail.php ================================================ getService('translator'); $first_name = ""; $last_name = ""; $aliases = ""; $type = array(); $skype = ""; $jabber = ""; $aim = ""; $networks_names = ""; $network_links = ""; $email = ""; $biography = ""; $aliases = null; $lang_first_name = ""; $lang_last_name = ""; $id = Input::Get("id", "int", 0); if ($id > 0) { $getBio = Input::Get("getBio", "int", 0); $author = new Author($id); if ($getBio == 1) { $json = '{"first_name":"","last_name":"","biography":""}'; $language = Input::Get("language", "int", 0); $bioObj = new AuthorBiography($author->getId(), $language); if ($bioObj->exists()) { $json = '{"first_name":"'.addslashes($bioObj->getFirstName()) .'","last_name":"'.addslashes($bioObj->getLastName()) .'","biography":"'.addslashes($bioObj->getBiography()) .'"}'; } echo $json; exit(); } $first_name = $author->getFirstName(); $last_name = $author->getLastName(); $type = $author->getType(); $skype = $author->getSkype(); $jabber = $author->getJabber(); $aim = $author->getAim(); $email = $author->getEmail(); $aliases = $author->getAliases(); } ?>
    • '; echo ''; echo ''; echo '
      '; } } ?>
  • trans('Contacts', array(), 'authors'); ?>

    getImage())) { $metaImage = new \MetaImage($author->getImage()); echo $author->getImage() != 0 ? '' : ''; } ?>
      getId()); $authoringCount = sizeof($authoringList); if ($authoringCount > 0) { ?>
    • getPublicationId() . '&f_issue_number=' . $authoringItem['article']->getIssueNumber() . '&f_section_number=' . $authoringItem['article']->getSectionNumber() . '&f_article_number=' . $authoringItem['article']->getArticleNumber() . '&f_language_id=' . $authoringItem['article']->getLanguageId() . '&f_language_selected=' . $authoringItem['article']->getLanguageId(); ?>
    • getName(); ?>
    getService('request'); $zendRouter = \Zend_Registry::get('container')->getService('zend_router'); $publicationMetadata = $requestSymfony->attributes->get('_newscoop_publication_metadata'); $baseUrl = $requestSymfony->getScheme().'://'.$publicationMetadata['alias']['name']; $metaImage = new \MetaImage($author->getImage()); $baseImage = $baseUrl.'/'.$metaImage->filerpath; ?>
    getCode(); editor_load_tinymce('txt_biography', $g_user, 0, $editorLanguage, 'authorbiography'); ?>
    ================================================ FILE: newscoop/admin-files/users/authors_ajax/grid.php ================================================ getService('translator'); function l_getType($types) { if (!is_array($types)) return; $t = ""; foreach ($types as $type){ if (strlen($t)>0) $t .= ", "; $t .= $type['type']; } return $t; } ?>
    trans('Author'); ?> trans('Type'); ?> trans('Delete'); ?>
    getName(); ?> getTypeWithNames()); ?> /delete.png" border="0" alt="trans('Delete author', array(), 'authors'); ?>" title="trans('Delete author', array(), 'authors'); ?>" />
    ================================================ FILE: newscoop/admin-files/users/do_add.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } read_user_common_parameters(); // $uType, $userOffs, $ItemsPerPage, search parameters verify_user_type(); compute_user_rights($g_user, $canManage, $canDelete); if (!$canManage) { camp_html_display_error($translator->trans('You do not have the right to create user accounts.', array(), 'users')); exit; } // define fields arrays $fields = array('UName', 'Name', 'Title', 'Gender', 'Age', 'EMail', 'City', 'StrAddress', 'State', 'CountryCode', 'Phone', 'Fax', 'Contact', 'Phone2', 'PostalCode', 'Employer', 'EmployerType', 'Position'); $notNullFields = array('UName'=>'Account name', 'Name'=>'Full Name', 'EMail'=>'E-Mail', 'Type'=>'Type'); // read fields values $errorField = ""; $typeParam = 'uType=' . urlencode($uType); $backLink = "/$ADMIN/users/edit.php?$typeParam"; foreach ($fields as $index=>$field) { $fieldValues[$field] = Input::Get($field, 'string', null); if ($fieldValues[$field] != '') $backLink .= "&" . urlencode($field) . "=" . urlencode($fieldValues[$field]); elseif (array_key_exists($field, $notNullFields) && $errorField == "") $errorField = $field; } // set the Reader field $Type = Input::Get('Type', 'int', 0); $fieldValues['Reader'] = ($uType == 'Subscribers') ? 'Y' : 'N'; if ( ($uType == 'Staff') && !$Type && ($errorField == '') ) { $errorField = 'Type'; } // display errors if found if ($errorField != "") { $desc = $notNullFields[$errorField]; if ($errorField == 'Type') { $errorMsg = $translator->trans('You must select a $1', array('$1' => $desc), 'users'); } else { $errorMsg = $translator->trans('You must fill in the $1 field.', array('$1' => $desc), 'users'); } camp_html_add_msg($errorMsg); camp_html_goto_page($backLink); } if (User::UserNameExists($fieldValues['UName'])) { $errorMsg = $translator->trans('That user name already exists, please choose a different login name.', array(), 'users'); camp_html_add_msg($errorMsg); camp_html_goto_page($backLink); } if (User::EmailExists($fieldValues['EMail'])) { $errorMsg = $translator->trans('Another user is registered with that e-mail address, please choose a different one.', array(), 'users'); camp_html_add_msg($errorMsg); camp_html_goto_page($backLink); } // read password $password = Input::Get('password', 'string', ''); $passwordConf = Input::Get('passwordConf', 'string', ''); if (strlen($password) < 6 || $password != $passwordConf) { $errorMsg = $translator->trans('The password must be at least 6 characters long and both passwords should match.', array(), 'users'); camp_html_add_msg($errorMsg); camp_html_goto_page($backLink); } $fieldValues['passwd'] = $password; // create user $editUser = new User(); if ($editUser->create($fieldValues)) { if ($uType == 'Staff') { $editUser->setUserType($Type); } camp_html_add_msg($translator->trans('User account $1 was created successfully.', array('$1' => $editUser->getUserName()), 'users'), "ok"); camp_html_goto_page("/$ADMIN/users/edit.php?User=".$editUser->getUserId()."&$typeParam"); } else { camp_html_add_msg($translator->trans('The user account could not be created.', array(), 'users')); camp_html_goto_page($backLink); } ?> ================================================ FILE: newscoop/admin-files/users/do_del.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } read_user_common_parameters(); // $uType, $userOffs, $ItemsPerPage, search parameters verify_user_type(); compute_user_rights($g_user, $canManage, $canDelete); if (!$canDelete) { camp_html_display_error($translator->trans('You do not have the right to delete user accounts.', array(), 'users')); exit; } $userId = Input::Get('User', 'int', 0); $editUser = new User($userId); if (!$editUser->exists()) { camp_html_display_error($translator->trans('No such user account.', array(), 'users')); exit; } $uName = $editUser->getUserName(); $editUser->delete(); reset_user_search_parameters(); $typeParam = 'uType=' . urlencode($uType); camp_html_add_msg($translator->trans('User account $1 was deleted successfully.', array('$1' => $uName), 'users'), "ok"); camp_html_goto_page("/$ADMIN/users/?$typeParam"); ?> ================================================ FILE: newscoop/admin-files/users/do_edit.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } read_user_common_parameters(); // $uType, $userOffs, $ItemsPerPage, search parameters verify_user_type(); compute_user_rights($g_user, $canManage, $canDelete); $userId = Input::Get('User', 'int', 0); $editUser = new User($userId); if ($editUser->getUserName() == '') { camp_html_display_error($translator->trans('No such user account.', array(), 'users'), "/$ADMIN/users/?".get_user_urlparams()); exit; } if (!$canManage && $editUser->getUserId() != $g_user->getUserId()) { $errMsg = $translator->trans('You do not have the right to change user account information.', array(), 'users'); camp_html_display_error($errMsg); exit; } $typeParam = 'uType=' . urlencode($uType); $userEmail = Input::Get('EMail', 'string', 0); if ($userEmail != $editUser->getEmail()) { if (User::EmailExists($userEmail, $editUser->getUserName())) { $backLink = "/$ADMIN/users/edit.php?$typeParam&User=".$editUser->getUserId(); $errMsg = $translator->trans('Another user is registered with that e-mail address, please choose a different one.', array(), 'users'); camp_html_add_msg($errMsg); camp_html_goto_page($backLink); } } $setPassword = Input::Get('setPassword', 'string', 'false') == 'true'; $customizeRights = Input::Get('customizeRights', 'string', 'false') == 'true'; if ($setPassword) { $password = Input::Get('password', 'string', 0); $passwordConf = Input::Get('passwordConf', 'string', 0); $backLink = "/$ADMIN/users/edit.php?$typeParam&User=".$editUser->getUserId(); if ($userId == $g_user->getUserId()) { $oldPassword = Input::Get('oldPassword'); if (!$editUser->isValidPassword($oldPassword) && !$editUser->isValidOldPassword($oldPassword)) { camp_html_add_msg($translator->trans('The password you typed is incorrect.', array(), 'users')); camp_html_goto_page($backLink); } } if (strlen($password) < 6 || $password != $passwordConf) { camp_html_add_msg($translator->trans('The password must be at least 6 characters long and both passwords should match.', array(), 'users')); camp_html_goto_page($backLink); } $editUser->setPassword($password); $liveUserValues['passwd'] = $password; } $userData = array( 'Name', 'Title', 'Gender', 'Age', 'EMail', 'City', 'StrAddress', 'State', 'CountryCode', 'Phone', 'Fax', 'Contact', 'Phone2', 'PostalCode', 'Employer', 'EmployerType', 'Position' ); // save user data foreach ($userData as $value) { $liveUserValues[$value] = Input::Get($value, 'string', null); $editUser->setProperty($value, $liveUserValues[$value], false); } $backLink = "/$ADMIN/users/edit.php?$typeParam&User=".$editUser->getUserId(); if ($LiveUserAdmin->updateUser($liveUserValues, $editUser->getPermUserId()) === false) { camp_html_add_msg($translator->trans('There was an error when trying to update the user info.', array(), 'users')); camp_html_goto_page($backLink); } else { $editUser->commit(); } if ($editUser->isAdmin() && $customizeRights && $canManage) { $rightsFields = $editUser->GetDefaultConfig(); $permissions = array(); foreach ($rightsFields as $field=>$value) { $val = Input::Get($field, 'string', 'off'); $permissionEnabled = ($val == 'off') ? false : true; $permissions[$field] = $permissionEnabled; } } if ($editUser->isAdmin() && $customizeRights && $canManage) { // save user customized rights $editUser->updatePermissions($permissions); } if ($editUser->isAdmin() && !$customizeRights && $canManage) { // save user rights based on existing user type $userTypeId = Input::Get('UserType', 'int', 0); if ($userTypeId != 0) { $editUser->setUserType($userTypeId); } } // unsubscribe $unsubscribe = Input::Get('unsubscribe', 'bool', false); if ($unsubscribe && ($canManage || $editUser->getUserId() == $g_user->getUserId())) { $editUser->setPermission('MailNotify', false); } camp_html_add_msg($translator->trans("User $1 information was changed successfully.", array( '$1' => $editUser->getUserName()), 'users'), "ok"); $editUser->fetch(); if ($editUser->getUserName() == $g_user->getUserName() && !$editUser->hasPermission('ManageUsers')) { camp_html_goto_page("/$ADMIN/"); } camp_html_goto_page("/$ADMIN/users/edit.php?$typeParam&User=".$editUser->getUserId()); ?> ================================================ FILE: newscoop/admin-files/users/do_ipadd.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } read_user_common_parameters(); // $uType, $userOffs, $ItemsPerPage, search parameters $uType = 'Subscribers'; compute_user_rights($g_user, $g_canManage, $g_canDelete); if (!$g_canManage) { camp_html_display_error($translator->trans('You do not have the right to change user account information.', array(), 'users')); exit; } // read input $g_userId = Input::Get('User', 'int', 0); $g_editUser = new User($g_userId); if ($g_editUser->getUserName() == '') { camp_html_display_error($translator->trans('No such user account.', array(), 'users')); exit; } $g_backLink = "/$ADMIN/users/edit.php?uType=Subscribers&User=$g_userId"; $g_cStartIP1 = Input::Get('cStartIP1', 'int', -1); $g_cStartIP2 = Input::Get('cStartIP2', 'int', -1); $g_cStartIP3 = Input::Get('cStartIP3', 'int', -1); $g_cStartIP4 = Input::Get('cStartIP4', 'int', -1); $g_cAddresses = Input::Get('cAddresses', 'int', 0); // check if input was correct if ($g_cStartIP1 == -1 || $g_cStartIP2 == -1 || $g_cStartIP3 == -1 || $g_cStartIP4 == -1) { camp_html_display_error($translator->trans('You must fill in the $1 field.', array('$1' => 'Start IP')), $g_backLink); exit; } if ($g_cAddresses == 0) { $g_errorMsg = $translator->trans('You must fill in the $1 field.', array('$1' => 'Number of addresses')); camp_html_display_error($g_errorMsg, $g_backLink); exit; } // check if the IP address group exists already $ipAddressArray = array($g_cStartIP1, $g_cStartIP2, $g_cStartIP3, $g_cStartIP4); $ipAccess = new IPAccess($g_userId, $ipAddressArray, $g_cAddresses); if ($ipAccess->exists()) { $g_errorMsg = $translator->trans('The IP address group $1:$2 conflicts with another existing group.', array( '$1' => $ipAccess->getStartIPstring(), '$2' => $g_cAddresses), 'users'); camp_html_display_error($g_errorMsg, $g_backLink); exit; } if (!$ipAccess->create($g_userId, $ipAddressArray, $g_cAddresses)) { camp_html_display_error($translator->trans('There was an error creating the IP address group.', array('$1' => "$g_startIPStr:$g_cAddresses"), 'users'), $g_backLink); exit; } camp_html_add_msg($translator->trans("The IP Group $1 has been created.", array('$1' => $ipAccess->getStartIPstring().":$g_cAddresses"), 'users'), "ok"); camp_html_goto_page($g_backLink); ?> ================================================ FILE: newscoop/admin-files/users/do_ipdel.php ================================================ getService('translator'); if (!SecurityToken::isValid()) { camp_html_display_error($translator->trans('Invalid security token!')); exit; } read_user_common_parameters(); // $uType, $userOffs, $ItemsPerPage, search parameters $uType = 'Subscribers'; compute_user_rights($g_user, $canManage, $canDelete); if (!$canManage) { camp_html_display_error($translator->trans('You do not have the right to change user account information.', array(), 'users')); exit; } $userId = Input::Get('User', 'int', 0); $editUser = new User($userId); if ($editUser->getUserName() == '') { camp_html_display_error($translator->trans('No such user account.', array(), 'users')); exit; } $startIP = Input::Get('StartIP', 'string', ''); $ipAccess = new IPAccess($userId, $startIP); $startIPstring = $ipAccess->getStartIPstring(); $addresses = $ipAccess->getAddresses(); if (!$ipAccess->delete()) { camp_html_goto_page("/$ADMIN/users/edit.php?uType=Subscribers&User=$userId"); } camp_html_add_msg($translator->trans("The IP address group $1 has been deleted.", array('$1' => "$startIPstring:$addresses"), 'users'), "ok"); camp_html_goto_page("/$ADMIN/users/edit.php?uType=Subscribers&User=$userId"); ?> ================================================ FILE: newscoop/admin-files/users/load_tinymce.php ================================================ getService('translator'); $stylesheetFile = $Campsite['WEBSITE_URL'] . '/admin/articles/article_stylesheet.css'; /** STEP 1 ******************************************************** * What are the names of the textareas you will be turning * into editors? ******************************************************************/ $editors = array(); if (is_array($p_dbColumns)) { foreach ($p_dbColumns as $dbColumn) { if ($dbColumn->getType() == ArticleTypeField::TYPE_BODY) { if ($p_articleNumber > 0) { $editors[] = $dbColumn->getName().'_'.$p_articleNumber; } else { $editors[] = $dbColumn->getName(); } } } } else { if ($p_articleNumber > 0) { $editors[] = $p_dbColumns.'_'.$p_articleNumber; } else { $editors[] = $p_dbColumns; } } $textareas = implode(",", $editors); /** STEP 2 ******************************************************** * Now, what are the plugins you will be using in the editors * on this page. List all the plugins you will need, even if not * all the editors will use all the plugins. ******************************************************************/ $plugins = array(); if ($p_user->hasPermission('EditorCopyCutPaste')) { $plugins[] = 'paste'; } if ($p_user->hasPermission('EditorFindReplace')) { $plugins[] = 'searchreplace'; } if ($p_user->hasPermission('EditorEnlarge')) { $plugins[] = 'fullscreen'; } if ($p_user->hasPermission('EditorTable')) { $plugins[] = 'table'; } if ($p_user->hasPermission('EditorLink')) { $plugins[] = 'campsiteinternallink'; if ($p_objectType == 'article') { $plugins[] = 'campsiteattachment'; } } if ($p_user->hasPermission('EditorImage') && $p_objectType == 'article') { $plugins[] = 'campsiteimage'; $plugins[] = 'media'; } $plugins[] = 'iframe'; $plugins[] = 'codehighlighting'; $plugins_list = implode(",", $plugins); $statusbar_location = "none"; if ($p_user->hasPermission('EditorStatusBar')) { $statusbar_location = "bottom"; } /** STEP 3 ******************************************************** * We create a default configuration to be used by all the editors. * If you wish to configure some of the editors differently this * will be done in step 4. ******************************************************************/ $toolbar1 = array(); if ($p_user->hasPermission('EditorBold')) { $toolbar1[] = "bold"; } if ($p_user->hasPermission('EditorItalic')) { $toolbar1[] = "italic"; } if ($p_user->hasPermission('EditorUnderline')) { $toolbar1[] = "underline"; } if ($p_user->hasPermission('EditorStrikethrough')) { $toolbar1[] = "strikethrough"; } if ($p_user->hasPermission('EditorTextAlignment')) { $toolbar1[] = "|"; $toolbar1[] = "justifyleft"; $toolbar1[] = "justifycenter"; $toolbar1[] = "justifyright"; $toolbar1[] = "justifyfull"; } if ($p_user->hasPermission('EditorIndent')) { $toolbar1[] = "|"; $toolbar1[] = "outdent"; $toolbar1[] = "indent"; $toolbar1[] = "blockquote"; } if ($p_user->hasPermission('EditorCopyCutPaste')) { $toolbar1[] = "|"; $toolbar1[] = "copy"; $toolbar1[] = "cut"; $toolbar1[] = "paste"; } if ($p_user->hasPermission('EditorTextDirection')) { $toolbar1[] = "|"; $toolbar1[] = "ltr"; $toolbar1[] = "rtl"; $toolbar1[] = "charmap"; } if ($p_user->hasPermission('EditorLink')) { $toolbar1[] = "|"; $toolbar1[] = "link"; $toolbar1[] = "anchor"; if ($p_objectType == 'article') { $toolbar1[] = "campsiteattachment"; } } if ($p_user->hasPermission('EditorSourceView')) { $toolbar1[] = "code"; } if ($p_user->hasPermission('EditorEnlarge')) { $toolbar1[] = "fullscreen"; } if ($p_user->hasPermission('EditorHorizontalRule')) { $toolbar1[] = "hr"; } $toolbar2 = array(); // Slice up the first toolbar if it is too long. if (count($toolbar1) > 34) { $toolbar2 = array_splice($toolbar1, 34); } // This is to put the bulleted and numbered list controls // on the most appropriate line of the toolbar. if ($p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber') && count($toolbar1) < 19) { $toolbar1[] = "|"; $toolbar1[] = "bullist"; $toolbar1[] = "numlist"; } elseif ($p_user->hasPermission('EditorListBullet') && !$p_user->hasPermission('EditorListNumber') && count($toolbar1) < 34) { $toolbar1[] = "|"; $toolbar1[] = "bullist"; } elseif (!$p_user->hasPermission('EditorListBullet') && $p_user->hasPermission('EditorListNumber') && count($toolbar1) < 20) { $toolbar1[] = "|"; $toolbar1[] = "numlist"; } $theme_buttons1 = (count($toolbar1) > 0) ? implode(',', $toolbar1) : ''; $theme_buttons2 = ''; $theme_buttons3 = ''; $localeFile = $Campsite['CAMPSITE_DIR'] . '/js/tinymce/langs/' . $p_editorLanguage . '.js'; if (!file_exists($localeFile)) { $p_editorLanguage = 'en'; } ?> ================================================ FILE: newscoop/admin-files/users/permission_list.php ================================================ getService('translator'); $content_group = array( 'ManagePub'=>$translator->trans('User may add/change publications', array(), 'users'), 'DeletePub'=>$translator->trans('User may delete publications', array(), 'users'), 'ManageIssue'=>$translator->trans('User may add/change issues', array(), 'users'), 'DeleteIssue'=>$translator->trans('User may delete issues', array(), 'users'), 'ManageSection'=>$translator->trans('User may add/change sections', array(), 'users'), 'DeleteSection'=>$translator->trans('User may delete sections', array(), 'users'), 'AddArticle'=>$translator->trans('User may add articles', array(), 'users'), 'ChangeArticle'=>$translator->trans('User may change articles', array(), 'users'), 'MoveArticle'=>$translator->trans('User may move articles', array(), 'users'), 'TranslateArticle'=>$translator->trans('User may translate articles', array(), 'users'), 'AttachImageToArticle'=>$translator->trans('User may attach images to articles', array(), 'users'), 'AttachTopicToArticle'=>$translator->trans('User may attach topics to articles', array(), 'users'), 'Publish'=>$translator->trans('User may publish articles', array(), 'users'), 'DeleteArticle'=>$translator->trans('User may delete articles', array(), 'users'), 'AddImage'=>$translator->trans('User may add images', array(), 'users'), 'ChangeImage'=>$translator->trans('User may change images', array(), 'users'), 'DeleteImage'=>$translator->trans('User may delete images', array(), 'users'), 'AddFile'=>$translator->trans('User may add article attachments', array(), 'users'), 'ChangeFile'=>$translator->trans('User may change article attachments', array(), 'users'), 'DeleteFile'=>$translator->trans('User may delete article attachments', array(), 'users'), 'ManageTopics'=>$translator->trans('User may manage topics', array(), 'users'), 'CommentModerate'=>$translator->trans('User may moderate comments', array(), 'users'), 'CommentEnable' => $translator->trans('User may enable comments', array(), 'users')); $templates_group = array( 'ManageTempl'=>$translator->trans('User may manage templates', array(), 'users'), 'DeleteTempl'=>$translator->trans('User may delete templates', array(), 'users')); $administrative_group = array( 'ChangeSystemPreferences'=>$translator->trans('User may change system preferences', array(), 'users'), 'ClearCache'=>$translator->trans('User may clear up the system cache', array(), 'users'), 'ManageBackup'=>$translator->trans('User may backup and restore the site data', array(), 'users')); $users_group = array( 'ManageUsers'=>$translator->trans('User may add/change staff accounts and passwords', array(), 'users', array(), 'users'), 'DeleteUsers'=>$translator->trans('User may delete staff accounts', array(), 'users', array(), 'users'), 'ManageUserTypes'=>$translator->trans('User may manage account types', array(), 'users', array(), 'users'), 'EditAuthors'=>$translator->trans('User may change authors', array(), 'users', array(), 'users') ); $article_types_group = array( 'ManageArticleTypes'=>$translator->trans('User may add/change article types', array(), 'users'), 'DeleteArticleTypes'=>$translator->trans('User may delete article types', array(), 'users')); $languages_group = array( 'ManageLanguages'=>$translator->trans('User may add languages and manage language information', array(), 'users'), 'DeleteLanguages'=>$translator->trans('User may delete languages', array(), 'users')); $countries_group = array( 'ManageCountries'=>$translator->trans('User may add/change country entries', array(), 'users'), 'DeleteCountries'=>$translator->trans('User may delete country entries', array(), 'users')); $misc_group = array( 'ViewLogs'=>$translator->trans('User may view audit logs', array(), 'users'), 'MailNotify'=>$translator->trans('User will be notified on several events', array(), 'users')); $localizer_group = array('ManageLocalizer'=>$translator->trans('User may manage localizer', array(), 'users')); $editor_group_1 = array( 'EditorBold'=>$translator->trans('User may use bold', array(), 'users'), 'EditorItalic'=>$translator->trans('User may use italic', array(), 'users'), 'EditorUnderline'=>$translator->trans('User may use underline', array(), 'users'), 'EditorStrikethrough'=>$translator->trans('User may use strikethrough', array(), 'users'), 'EditorTextAlignment'=>$translator->trans('User may change text alignment', array(), 'users'), 'EditorCopyCutPaste'=>$translator->trans('User may copy, cut, and paste', array(), 'users'), 'EditorUndoRedo'=>$translator->trans('User may undo/redo', array(), 'users'), 'EditorFindReplace'=>$translator->trans('User may find and replace', array(), 'users'), 'EditorCharacterMap'=>$translator->trans('User may add special characters', array(), 'users'), 'EditorTextDirection'=>$translator->trans('User may change text direction', array(), 'users'), 'EditorIndent'=>$translator->trans('User may set indents', array(), 'users'), 'EditorLink'=>$translator->trans('User may add links', array(), 'users'), 'EditorSubhead'=>$translator->trans('User may add subheads', array(), 'users'), 'EditorImage'=>$translator->trans('User may insert images', array(), 'users'), 'EditorSourceView'=>$translator->trans('User may view the HTML source', array(), 'users'), 'EditorEnlarge'=>$translator->trans('User may enlarge the editor', array(), 'users'), 'EditorStatusBar'=>$translator->trans('User may use the editor status bar', array(), 'users')); $editor_group_2 = array( 'EditorFontFace'=>$translator->trans('User may change the font face', array(), 'users'), 'EditorFontSize'=>$translator->trans('User may change the font size', array(), 'users'), 'EditorListBullet'=>$translator->trans('User may create bulleted lists', array(), 'users'), 'EditorListNumber'=>$translator->trans('User may create numbered lists', array(), 'users')); $editor_group_3 = array('EditorTable'=>$translator->trans('User may insert tables', array(), 'users')); $editor_group_4 = array( 'EditorHorizontalRule'=>$translator->trans('User may insert horizontal rules', array(), 'users'), 'EditorFontColor'=>$translator->trans('User may change the font color', array(), 'users'), 'EditorSuperscript'=>$translator->trans('User may use superscripts', array(), 'users'), 'EditorSubscript'=>$translator->trans('User may use subscripts', array(), 'users'), 'EditorSpellcheckerEnabled'=>$translator->trans('Enable Firefox spell checking by default', array(), 'users')); $rights = array($translator->trans('Content')=>$content_group, $translator->trans('Templates', array(), 'users')=>$templates_group, $translator->trans('Staff Management', array(), 'users')=>$users_group, $translator->trans('Administrative tasks', array(), 'users')=>$administrative_group, $translator->trans('Article Types')=>$article_types_group, $translator->trans('Languages')=>$languages_group, $translator->trans('Countries')=>$countries_group, $translator->trans('Miscellaneous', array(), 'users')=>$misc_group, $translator->trans('Localizer')=>$localizer_group, $translator->trans('Editor Basic Settings', array(), 'users')=>$editor_group_1, $translator->trans('Editor Advanced Font Settings', array(), 'users')=>$editor_group_2, $translator->trans('Editor Table Settings', array(), 'users')=>$editor_group_3, $translator->trans('Editor Miscellaneous Settings', array(), 'users')=>$editor_group_4); // plugins: extend permission list $rights[$translator->trans('Plugins')] = array('plugin_manager' => 'User may manage Plugins'); foreach (CampPlugin::GetPluginsInfo(true) as $info) { foreach ($info['permissions'] as $permission => $label) { $rights[$info['label']][$permission] = $translator->trans($label); } } $pluginsService = \Zend_Registry::get('container')->get('newscoop.plugins.service'); $collectedPermissionsData = $pluginsService->collectPermissions(); $rights = array_merge($collectedPermissionsData, $rights); return $rights; } // fn camp_get_permission_list ?> ================================================ FILE: newscoop/admin-files/users/users_common.php ================================================ getService('translator'); if (!isset($uType)) read_user_common_parameters(); if ($uType != "Staff" && $uType != "Subscribers") { camp_html_display_error($translator->trans('Invalid value of user type parameter', array(), 'users')); exit(0); } return $uType; } $defaultUserSearchParameters = array('full_name'=>'', 'user_name'=>'', 'email'=>'', 'subscription_how'=>'expires', 'subscription_when'=>'before', 'subscription_date'=>'', 'subscription_status'=>'', 'startIP1'=>'', 'startIP2'=>'', 'startIP3'=>'', 'startIP4'=>''); $userSearchParameters = array('full_name'=>'', 'user_name'=>'', 'email'=>'', 'subscription_how'=>'expires', 'subscription_when'=>'before', 'subscription_date'=>'', 'subscription_status'=>'', 'startIP1'=>'', 'startIP2'=>'', 'startIP3'=>'', 'startIP4'=>''); function read_user_common_parameters() { global $uType, $userOffs, $ItemsPerPage; global $defaultUserSearchParameters, $userSearchParameters; $uType = Input::Get('uType', 'string', ''); $userOffs = camp_session_get('userOffs', 0); if ($userOffs < 0) { $userOffs = 0; } $ItemsPerPage = Input::Get('ItemsPerPage', 'int', 20); foreach ($userSearchParameters as $parameter=>$defaultValue) { $userSearchParameters[$parameter] = camp_session_get($parameter, $defaultUserSearchParameters[$parameter]); } } function user_search_is_set() { global $defaultUserSearchParameters, $userSearchParameters; foreach ($userSearchParameters as $parameter=>$defaultValue) { if ($userSearchParameters[$parameter] != $defaultUserSearchParameters[$parameter]) { return true; } } return false; } function reset_user_search_parameters() { global $userSearchParameters, $_REQUEST, $_GET, $_POST, $_SESSION; $params = $userSearchParameters; $params['userOffs'] = null; foreach ($params as $parameter=>$defaultValue) { if (isset($_REQUEST[$parameter])) { unset($_REQUEST[$parameter]); } if (isset($_GET[$parameter])) { unset($_GET[$parameter]); } if (isset($_POST[$parameter])) { unset($_POST[$parameter]); } if (isset($_SESSION[$parameter])) { unset($_SESSION[$parameter]); } } } function compute_user_rights($User, &$canManage, &$canDelete) { global $uType; if (!isset($uType)) read_user_common_parameters(); switch ($uType) { case 'Staff': $canManage = $User->hasPermission('ManageUsers'); $canDelete = $User->hasPermission('DeleteUsers'); break; case 'Subscribers': $canManage = $User->hasPermission('ManageReaders'); $canDelete = $User->hasPermission('ManageReaders'); break; default: $canManage = false; $canDelete = false; } } function get_user_urlparams($userId = 0, $print_back_link = false, $strip_search = false, $strip_offset = false) { global $uType, $userOffs, $userSearchParameters; $params_search = array('full_name', 'user_name', 'email', 'subscription_how', 'subscription_when', 'subscription_date', 'subscription_status'); $params = array('uType'); if (!$strip_offset) { $params[] = 'userOffs'; } $url = ''; if ($userId > 0) $url = 'User=' . $userId; foreach ($params as $index=>$param) { if ($$param != '' && $$param != '0') { $url .= '&' . urlencode($param) . '=' . urlencode($$param); } } if ($print_back_link) { $url .= '&backLink=' . urlencode($_SERVER['REQUEST_URI']); } if (!$strip_search) { foreach ($params_search as $param) { if (!empty($userSearchParameters[$param])) { $url .= '&' . urlencode($param) . '=' . urlencode($userSearchParameters[$param]); } } } if ($url != '' && $url[0] == '&') $url = substr($url, 1); return $url; } function get_users_from_search($isReader, $orderFields, $orderField, $orderDir, &$totalUsers) { global $g_ado_db; global $userSearchParameters, $userOffs, $ItemsPerPage; $sqlBase = "SELECT DISTINCT u.Id, u.Name, u.UName, u.EMail, DATE_FORMAT(u.time_created, '%Y-%m-%d %T') as time_created FROM liveuser_users AS u"; $sql = ''; if ($userSearchParameters['startIP1'] != 0) { $sql .= " LEFT JOIN SubsByIP AS sip ON u.Id = sip.IdUser"; } if ($userSearchParameters['subscription_date'] != "" || $userSearchParameters['subscription_status'] != "") { $sql .= " LEFT JOIN Subscriptions AS s ON u.Id = s.IdUser"; if ($userSearchParameters['subscription_date'] != "") { $sql .= " LEFT JOIN SubsSections AS ss ON s.Id = ss.IdSubscription"; } } $sql .= " WHERE u.Reader = '$isReader'"; if ($userSearchParameters['full_name'] != '') { $sql .= " AND Name like '%" . $g_ado_db->escape($userSearchParameters['full_name']) . "%'"; } if ($userSearchParameters['user_name'] != '') { $sql .= " AND UName like '%" . $g_ado_db->escape($userSearchParameters['user_name']) . "%'"; } if ($userSearchParameters['email'] != '') { $sql .= " AND EMail like '%" . $g_ado_db->escape($userSearchParameters['email']) . "%'"; } if ($userSearchParameters['subscription_date'] != '') { $ss_field = "TO_DAYS(ss.StartDate) - TO_DAYS('".$userSearchParameters['subscription_date']."')"; if ($userSearchParameters['subscription_how'] == 'expires') { $ss_field .= " + CAST(Days AS SIGNED)"; } switch ($userSearchParameters['subscription_when']) { case 'before': $comp_sign = "<="; break; case 'after': $comp_sign = ">="; break; case 'on': $comp_sign = "="; break; } $sql .= " AND ($ss_field) $comp_sign 0"; } if ($userSearchParameters['subscription_status'] != "") { $sql .= " AND s.Active = '" . ($userSearchParameters['subscription_status'] == 'active' ? 'Y' : 'N') . "'"; } if ($userSearchParameters['startIP1'] != 0) { $minIP = $userSearchParameters['startIP1'] * 256 * 256 * 256 + $userSearchParameters['startIP2'] * 256 * 256 + $userSearchParameters['startIP3'] * 256 + $userSearchParameters['startIP4']; $maxIP2 = $userSearchParameters['startIP2'] != 0 ? $userSearchParameters['startIP2'] : 255; $maxIP3 = $userSearchParameters['startIP3'] != 0 ? $userSearchParameters['startIP3'] : 255; $maxIP4 = $userSearchParameters['startIP4'] != 0 ? $userSearchParameters['startIP4'] : 255; $maxIP = $userSearchParameters['startIP1'] * 256 * 256 * 256 + $maxIP2 * 256 * 256 + $maxIP3 * 256 + $maxIP4; $sql .= " AND ((sip.StartIP >= $minIP AND sip.StartIP <= $maxIP)" . " OR ((sip.StartIP - 1 + sip.Addresses) >= $minIP AND (sip.StartIP - 1 + sip.Addresses) <= $maxIP))"; } if ($userSearchParameters['subscription_date'] != "") { $sql .= " GROUP BY s.Id"; } $sql .= " ORDER BY " . $orderFields[$orderField] . " $orderDir"; $searchSql = $sqlBase.$sql." LIMIT $userOffs, $ItemsPerPage"; $users = $g_ado_db->GetAll($searchSql); $countSql = "SELECT COUNT(*) FROM liveuser_users as u ".$sql; $totalUsers = $g_ado_db->GetOne($countSql); return $users; } ?> ================================================ FILE: newscoop/admin-files/widgets.php ================================================ getService('translator'); echo camp_html_breadcrumbs(array( array($translator->trans('Dashboard', array(), 'home'), $Campsite['WEBSITE_URL'] . '/admin/home.php'), array($translator->trans('Widgets', array(), 'home'), ''), )); ?> ================================================ FILE: newscoop/admin-style/ColVis.css ================================================ @charset "utf-8"; /* CSS Document */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TableTools styles */ .TableTools { float: right; margin-bottom: 1em; padding: 0; } .TableTools_Button { position: relative; float: left; margin-right: 3px; padding: 2px 10px 5px 10px; background-color: #fff; border: 1px solid #d0d0d0; cursor: pointer; *cursor: hand; font-size:12px; line-height:120%; font-weight:normal; } .ui-widget-header .ui-state-default.TableTools_Button { font-weight:normal !important; padding: 3px 10px 5px 10px; } button.TableTools_Button::-moz-focus-inner { border: none !important; padding: 0; } .TableTools_text_hover { border: 1px solid #999; background-color: #f0f0f0; } div.TableTools_collectionBackground { background-color: black; z-index: 1100; } div.TableTools_collection { position: relative; width: 150px; background-color: #f3f3f3; padding: 3px; border: 1px solid #ccc; z-index: 1102; } div.TableTools_collection button.TableTools_Button { background-color: white; width: 100%; float: none; margin-bottom: 2px; } div.TableTools_catcher { position: absolute; z-index: 1101; } .disabled { color: #999; } button.ColVis_Button { text-align: left; } div.ColVis_collection button.ColVis_Button:hover { border: 1px solid #999; background-color: #f0f0f0; } span.ColVis_radio { display: inline-block; width: 20px; } ================================================ FILE: newscoop/admin-style/action_buttons.css ================================================ @charset "utf-8"; /* CSS Document */ ul.navigation { margin: 0; padding: 0; display:block; height:25px; } ul.navigation li { float: left; margin-right:10px; } .actions ul.navigation li { font-size: 12px; font-weight: normal; line-height: 120%; list-style: none; margin: 0 6px 0 0; padding: 0; position: relative; text-decoration: none; border: 1px solid #9D9D9D; background-color: #f6f6f6; display:block; background: -moz-linear-gradient(top, #fafafa 0, #f6f6f6 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(100%, #f6f6f6)); overflow:hidden; } .actions ul.navigation li:hover { text-decoration: none; border: 1px solid #007fb3; color: #fff; background-color: #007fb3; background: -moz-linear-gradient(top, #409fc6 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #409fc6), color-stop(100%, #007fb3)); } .actions ul.navigation li a { padding: 4px 10px 5px 10px; display:block; color: #3B3B3B; } .actions ul.navigation li:hover a, .actions ul.navigation li a:hover { color: #fff; text-decoration: none; } .actions ul.navigation li a.upload, .actions ul.navigation li a.download, .actions ul.navigation li a.edit, .actions ul.navigation li a.add { padding-left: 20px; background-image:url(images/solo_icons.png); background-repeat:no-repeat; } .actions ul.navigation li a.upload { background-position: 5px 5px; } .actions ul.navigation li a.upload:hover { background-position: -395px 5px; } .actions ul.navigation li a.download { background-position: 5px -24px; } .actions ul.navigation li a.download:hover { background-position: -395px -24px; } .actions ul.navigation li a.edit { background-position: 5px -54px; } .actions ul.navigation li a.edit:hover { background-position: -395px -54px; } .actions ul.navigation li a.add { background-position: 5px -85px; } .actions ul.navigation li:hover a.add, .actions ul.navigation li a.add:hover { background-position: -395px -85px; } ================================================ FILE: newscoop/admin-style/admin_stylesheet.css ================================================ @charset "utf-8"; /* CSS Document */ body { font-size: 62.5%; font-family:Arial, Helvetica, sans-serif; background: #f5f5f5; margin: 0; padding: 0; } h2 { color: #000000; font-size: 2.1em; font-weight: normal; margin: 0; padding: 0 0 10px; } h3 { font-size:1.7em; font-weight:normal; color:#000; padding:0 0 10px 0; margin:0; } label { font-size:12px; } select { font-size:12px; font-family:Arial, Helvetica, sans-serif; border:1px solid #9d9d9d; } /* Clearfix */ .clearfix:after, li:after, .poi_coors:after, .map_mapedit .ui-widget-content:after { content: "."; display: block; height: 0; clear: both; visibility: hidden;} .clearfix, li, .poi_coors, .map_mapedit .ui-widget-content { display: inline-block; } * html .clearfix, * html li, * html .poi_coors, * html .map_mapedit .ui-widget-content { height: 1%;} .clearfix, li, .poi_coors, .map_mapedit .ui-widget-content { display: block; } /* Meta bar */ .meta-bar { background:#007fb3; height:22px; color:#fff; border-bottom:1px solid #939393; text-align:right; font-size:1.1em; } .meta-bar ul { margin:0 7px 0 0; padding:3px 0 0 0; list-style-type:none; } .meta-bar ul li { margin:2px 0 0 0; padding:0 9px; float: right; } .meta-bar ul li a { color:#fff; text-decoration:underline; font-weight:bold; } /* Main navigation */ .main-menu-bar { background:#3b3b3b; height:36px; text-align:left; padding:5px 0 0 0; } /* Breadcrumbs */ .breadcrumb-bar { min-height:21px; text-align:left; padding:7px 0 0 16px; border-bottom:1px solid #cccccc; clear:both; background: #fff; -moz-box-shadow: 0 0px 4px rgba(0,0,0,.15); -webkit-box-shadow: 0 0px 4px rgba(0,0,0,.15); box-shadow: 0 0px 4px rgba(0,0,0,.15); margin-top: 1px; } .breadcrumb-bar.zend { padding-top: 10px; font-size: 1.1em; } .breadcrumbs { margin:0; padding:0 0 5px 0; list-style-type:none; } .breadcrumbs li { margin:0; padding: 0 2px 4px 0; float: left; font-size:1.1em; } .breadcrumbs li.separator { background: url(images/breadcrumb_arrow.png) no-repeat 100% 35%; float: left; font-size: 1.1em; margin: 0 8px 0 0; padding: 0 14px 4px 0; border:none; } .breadcrumbs li:first-child { padding-left: 0; } .breadcrumbs li:first-child a { padding-left:0; } .breadcrumbs li a { margin:0; padding:0; color:#007fb3; } .breadcrumbs li a:hover { background:#edf6f9; color:#005e85; } .breadcrumbs li a.category { font-weight:bold; padding-right: 4px; } .link, .ui-widget-content a.link { color:#007fb3; text-decoration:none; position:relative; } .link:hover, .ui-widget-content a.link:hover { text-decoration:underline; } .link .icon { background-image:url(images/ui-icons_007fb3_256x240.png); background-repeat:no-repeat; width:16px; height:16px; display:block; left: 0.2em; margin: -3px 5px 0 0; position: absolute; top: 2px; overflow: hidden; } .link .add-icon { background-position: -32px -128px; } .link .left-icon { background:url(images/left_arrow_small.png) no-repeat -1px 2px; } .icon-link { padding-left: 20px; } .breadcrumb-bar .link .icon { margin: -3px 5px 0 0; } .breadcrumb-bar .link { float: right; padding-right:16px; font-size:1.2em; } .info-bar .link { padding-right:20px; font-size:1.3em; float:left; } /* Toolbar */ .toolbar, #geolocation .toolbar, .activeSection, h1 { background:#f5f5f5; min-height:39px; text-align:left; padding:10px 24px 0 30px; border-bottom:1px solid #cccccc; clear:both; background: -moz-linear-gradient(top, #e3e3e3 0, #f5f5f5 2px, #f5f5f5 2px, #f5f5f5 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e3e3e3), color-stop(2%, #f5f5f5), color-stop(2%, #f5f5f5), color-stop(100%, #f5f5f5)); -moz-box-shadow: 0 1px 4px rgba(0,0,0,.15); -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.15); box-shadow: 0 1px 4px rgba(0,0,0,.15); } .activeSection { min-height:30px; } #geolocation .toolbar { min-height:35px; padding:9px 8px 0 14px; background:#fff; -moz-box-shadow: 0 1px 4px rgba(0,0,0,.15); -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.15); box-shadow: 0 1px 4px rgba(0,0,0,.15); } .top-input { background: url(images/input_bg.png) repeat-x scroll 0 0 #FFFFFF; border: 1px solid #9d9d9d; color:#007fb3; float: left; font-size: 16px; height: 27px; line-height: 20px; margin: 0; padding: 0; text-indent: 6px; width: 43%; } .toolbar .top-input { margin-right: 10px; } .toolbar .comments { font-size: 1.4em; color:#007fb3; padding: 0 0 0 15px; margin:6px 0 0 0; float:left; background:url(images/commennts_big.png) no-repeat 0 3px; } .save-button-bar { float:right; margin-left:16px; } .top-button-bar { margin-top:2px; float:right; margin-right:6px; } .top-button-bar input.default-button { float:left; margin: 0 0 0 10px; } .save-button, .save-button-small { border: 1px solid #007fb3; color: #fff; font-family: Arial,Helvetica,sans-serif; font-size: 14px; font-weight: normal; line-height: 18px; margin: 0 6px 0 0; padding: 4px 9px 5px 9px; background-color: #007fb3; background: -moz-linear-gradient(top, #2390bd 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #2390bd), color-stop(100%, #007fb3)); outline:none; } .save-button:hover, .save-button-small:hover { border: 1px solid #005e85; background: #005e85; background: -moz-linear-gradient(top, #409fc6 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #409fc6), color-stop(100%, #007fb3)); } .sticky { padding:0; width:100%; } .wrapper { margin: 0 30px 0 30px; padding:10px 0 0 0; } .wrapper { margin: 0 30px 0 30px; padding:10px 0 0 0; } .main-content-wrapper { margin-right: 1%; float:left; width:71%; min-width:670px; min-height: 820px; } .sidebar { float:left; width:28%; min-width:200px; } .big-block { margin-bottom:10px; } .small-block { padding:0; margin-bottom:10px; } .block-shadow { -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .highlight-block { border: 1px solid #007fb3; } fieldset.plain { border:none; padding:0; margin:0; } fieldset.comments-block { margin-top:16px; } fieldset ul { border:none; list-style-type:none; padding:0; margin:0; } fieldset ul li { padding:0 0 12px 0; margin:0; } fieldset .input_text, .input_text { background: url(images/input_bg.png) repeat-x scroll 0 0 #FFFFFF; font-family:Arial, Helvetica, sans-serif; border: 1px solid #9D9D9D; float: left; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; width:auto; } fieldset .input_text_alt, .input_text_alt { background: url(images/input_bg.png) repeat-x scroll 0 0 #FFFFFF; font-family:Arial, Helvetica, sans-serif; border: 1px solid #9D9D9D; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; width:auto; } fieldset.plain label, label.block-label { display:block; font-size: 13px; font-weight:bold; color:#696969; line-height: 20px; margin: 0; padding: 0 0 4px 0; text-indent: 1px; float:none; clear:left; } .icon-button, .text-button { margin: 0 0 0 10px; position: relative; padding: 4px 10px 4px 0; cursor: pointer; float: left; list-style: none; font-size:12px; font-weight:normal; line-height:120%; text-decoration:none; } .text-button { padding: 4px 10px 0px 10px; line-height:120%; height:19px; margin: 0 10px 0 0; } .no-text { padding: 4px 0 4px 0; } .icon-button span.ui-icon { float: left; margin: -1px 4px 0 3px; } .text-container { height:18px; padding: 7px 0 0 0; position:relative; } .date-last-modified { font-style:italic; color:#aaa; } .arrow-link, .ui-widget-content a.arrow-link { color:#409fc6; text-decoration:none; background:url(images/dropdown-arrow.png) no-repeat right 50%; padding: 0 12px 0 0; } .arrow-link:hover, .ui-widget-content a.arrow-link:hover { text-decoration:underline; } input.default-button, .button { background: -moz-linear-gradient(center top , #fafafa 0pt, #f6f6f6 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(100%, #f6f6f6)); border: 1px solid #9d9d9d; color: #444444; font-family: Arial,Helvetica,sans-serif; font-size: 12px; font-weight: normal; line-height: 17px; margin: 0 6px 0 0; outline: medium none; padding: 3px 9px 3px; } .save-button-small { font-size: 12px; font-weight: normal; line-height: 17px; margin: 0 6px 0 0; padding: 3px 9px 3px; } input.default-button[disabled], input.default-button[disabled]:hover, input.save-button-small[disabled], input.default-button-smal[disabled]:hover, input.button[disabled], input.button[disabled]:hover { background: -moz-linear-gradient(center top , #fdfdfd 0pt, #fbfbfb 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fdfdfd), color-stop(100%, #fbfbfb)); border: 1px solid #cecece; color: #b2b3b2; } input.default-button:hover, .button:hover { background: #007FB3; background: -moz-linear-gradient(center top , #2390BD 0pt, #007FB3 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #2390BD), color-stop(100%, #007FB3)); border: 1px solid #007FB3; color: #FFFFFF; } input.next-to-field { margin: 0 6px 0 0; } .collapsible .ui-accordion-header { cursor: pointer; margin-top: 0; position: relative; font-weight:bold; } .collapsible .ui-accordion-header a { display: block; font-size: 1em; padding: 0.5em 0.5em 0.5em 0.7em; padding-left: 2.2em; color:#007fb3; outline:none; } .collapsible .ui-state-default { cursor: pointer; margin-top: 0; position: relative; border:none; background-image:none; background: -moz-linear-gradient(center top , #fbfbfb 0pt, #f8f8f8 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fbfbfb), color-stop(100%, #f8f8f8)); border-bottom:none; } .collapsible .ui-state-hover { border:none; background-image:none; background: -moz-linear-gradient(center top , #f8f8f8 0pt, #ebebeb 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f8f8f8), color-stop(100%, #ebebeb)); } .collapsible .ui-state-hover { } .collapsible .ui-state-hover a { color:#007fb3; } .collapsible .ui-accordion-header .ui-icon { left: 0.5em; margin-top: -8px; position: absolute; top: 50%; } .collapsible .ui-state-hover .ui-icon, .collapsible .ui-state-active .ui-icon { background-image:url(images/ui-icons_666666_256x240.png); } .collapsible .ui-state-default .ui-icon, .collapsible .ui-state-hover .ui-icon { background-position:-32px -16px; } .collapsible .ui-state-active .ui-icon { background-position:-64px -16px; } .collapsible .ui-state-active { background-image:none; background: -moz-linear-gradient(center top , #fbfbfb 0pt, #f8f8f8 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fbfbfb), color-stop(100%, #f8f8f8)); border-bottom:1px solid #ebebeb; } .collapsible .ui-state-active:hover { background: -moz-linear-gradient(center top , #f8f8f8 0pt, #ebebeb 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f8f8f8), color-stop(100%, #ebebeb)); } .padded { padding:8px; } .padded-strong { padding:10px; } .input_select { height:25px; background-color: #FFFFFF; border: 1px solid #9d9d9d; font-size: 12px; font-family:Arial, Helvetica, sans-serif; vertical-align:top; padding:2px 2px 2px 0; margin:0; } fieldset.plain label.inline-style, .frame label.inline-style , label.inline-style { font-size: 12px; font-weight:bold; color:#696969; line-height: 22px; margin: 0; padding:0; text-indent: 0; clear:none; display:inline; width:auto; } .left-floated, fieldset.plain .left-floated { float:left; margin-left:0; margin-right:10px; } .right-floated, fieldset.plain .right-floated { float:right; margin-left:10px; margin-right:0; text-align:right; } select.right-floated, input.right-floated, fieldset.plain select.right-floated, fieldset.plain input.right-floated { text-align:left; } .clear { clear: both; display: block; height: 0; overflow: hidden; visibility: hidden; width: 0; } .separator { border-right:1px solid #CCC; padding:2px; margin:0 5px 0 5px; } .block-list { padding:0; margin:8px 0 0 0; list-style-type:none; } .block-list li { padding:8px; margin: 0 0 8px 0; font-size:1.2em; border:1px solid #CCC; list-style-type:none; position:relative; } .block-list li:last-child { margin-bottom:0; } .icon-link span.ui-icon-pencil { background-position: -66px -114px; } .corner-button { position:absolute; right:0; top:2px; height:17px; width:17px; padding: 4px; display:block; overflow:hidden; text-indent:-9999px; text-decoration:none; } .corner-button .ui-icon { background-image:url(images/ui-icons_007fb3_256x240.png); } .corner-button:hover .ui-icon-closethick { background-image:url(images/ui-icons_d00000_256x240.png); } .frame { padding:8px; border:1px solid #CCC; margin: 0 0 8px 0; } .frame:last-child { margin-bottom:0px; } .simple-list { padding:0 0 0 2px; margin:6px 0 0 0; list-style-type:none; } .check-list { padding:0; margin:3px 0 0 0; list-style-type:none; } .simple-list li { padding:0 0 0 12px; margin: 0 0 4px 0; font-size:12px; border:none; position:relative; color:#7c7c7c; background:url(images/simple-bullet.png) no-repeat 0 50%; } .check-list li { padding:0 0 6px 0; margin: 0; font-size:12px; border:none; position:relative; color:#7c7c7c; } .check-list li:last-child { padding:0; } .input_checkbox { height: 13px; width: 13px; margin: 0; padding: 0; } .check-list .input_checkbox { float: left; margin-right: 7px; } .check-list label, .frame .check-list label, .inline, fieldset.plain .check-list label { float: left; width:auto; clear:none; line-height:120%; font-weight:normal; } dl.inline-list { float: left; margin: 0; padding: 0; } dl.inline-list dt { clear: left; float: left; margin: 0; padding: 4px 0; font-weight: bold; color:#666666; font-size:1.2em; text-align:left; } dl.inline-list dd { float: left; margin: 0; padding: 4px 0 4px 15px; font-size:1.2em; } .sidebar dl.inline-list { padding: 0 0 0 3px; } .sidebar dt { width:100px; } .main-content-wrapper dl.inline-list { padding: 0 0 0 3px; width:100%; } .main-content-wrapper dl.inline-list dt { width:100px; padding: 4px 0 4px 0; } .main-content-wrapper dl.inline-list dd { width:70%; padding: 4px 0 4px 0; } .main-content-wrapper dl.inline-list dd.buttons { padding: 12px 0 4px 0; } .sidebar .check-list { padding:0 0 4px 4px; } .inner-tabs .ui-widget-content { border:none; } .inner-tabs .ui-tabs { padding:0; margin:0; } .tabs .ui-state-default a { color:#007fb3; } .tabs .ui-state-default a:hover { color:#fff; } .tabs .ui-state-active a, .tabs .ui-state-active a:link, .tabs .ui-state-active a:visited { color:#444; } .tabs .ui-tabs-nav { margin: 0; padding: 3px 3px 0 4px; } .inner-tabs .ui-tabs-panel { padding: 8px 0 0 0; } .ui-widget .block-list li { font-size:12px; } .block-list li { line-height:130% } .block-list li img { float:left; border:1px solid #9d9d9d; margin-right:15px; } .block-list li a:hover img { border:1px solid #007fb3; } .block-list li a.text-link { color:#007fb3; text-decoration:none; display:block; width:90%; } .block-list li a.text-link:hover { color:#007fb3; text-decoration:underline; } .info { font-style:italic; color:#7c7c7c; } .map-thumb_cont { float:left; width:128px; } .map-thumb { margin:0; padding:0; width:128px; float:left; border:1px solid #9d9d9d; background:#9d9d9d; } .map-thumb_tab { border-top:1px solid #9d9d9d; } .map-thumb:hover { border:1px solid #007eb1; background:#007eb1; } .map-thumb img { border:none; margin:0; padding:0; display:block; } .map-thumb:hover img { border:none; } .input_radio { float: left; margin-right: 5px; } .info-bar { margin-right: 2%; width:70%; height:27px; clear:both; padding:3px 0 0 0; } .info-bar.solo { margin-top: 10px; padding-left:30px; } .info-text { font-size:1.2em; color:#858585; float:right; padding:1px 0 0 0; } .action-list { margin: 0 0 8px 0; padding:0; list-style-type:0; } .action-list li { display: block; margin: 0; padding: 0; float:right; width:auto; line-height: 18px; margin-left: 5px; } .action-list ul li.new, .action-list ul li.approved, .action-list ul li.hidden { border-radius: 3px 3px 3px 3px; margin-left: 4px; padding-right: 10px; } .action-list ul li.new { background: none repeat scroll 0 0 #EAF7DA; border: 1px solid #2A8921; color: #006B0E; } .action-list ul li.approved { background: none repeat scroll 0 0 #FFFFFF; border: 1px solid #5B5B5B; color: #585858; } .action-list ul li.hidden { background: none repeat scroll 0 0 #F2F2F2; border: 1px solid #838383; color: #969696; } .action-list ul li.button-first { margin-left:20px; } .action-list ul li label, .action-list ul li label.inline-style { font-weight: normal; } .action-list ul li.new label.inline-style { color: #006B0E; } .action-list ul li.approved label.inline-style { color: #585858; } .action-list ul li.hidden label.inline-style { color: #969696; } /*---Comments color*/ .comment_approve { background: transparent; } .comment_pending_approve { background-color: #transparent; } .comment_hide { background-color: #d0d0d0; } .comment_pending_hidden { background-color: #d0d0d0; color:#8a8a8a; } .comment_inbox { background: #e5f9d0; } .comment_pending_inbox { background: #cbf3a1; } .comment_delete { background-color: #ffc6c6; } .comment_pending_delete { background-color: #ffc6c6; } /*---END Comments color---*/ a.calendar-button { background:url(images/calendar_big.png) no-repeat scroll 0 0 transparent; height: 16px; margin: 0 10px 0 6px; outline: medium none; width: 17px; display:inline; padding: 0 14px 0 0; text-decoration:none; } .logo { float:right; height:21px; width:83px; background:url(images/newscoop_logo.png) no-repeat 0 0; margin: 1px 16px 0 0; } .position-helper { height:25px; width: 499px; float:left; position:relative; } .floated-close { position:absolute; background:url(images/round_close.png) no-repeat 0 0; height:12px; width:12px; display:block; top:7px; right:6px; } .round-delete, .round-plus { background:url(images/round_close.png) no-repeat 0 0; height:12px; width:12px; display:block; float:left; outline:none; text-indent:-99999px; overflow:hidden; } .round-plus { background:url(images/round_plus.png) no-repeat 0 0; } .floated-close:hover, .round-delete:hover, .round-plus:hover { background-position: 0 -15px } .clear-margin, input.clear-margin, select.clear-margin { margin:0 !important; } a.clear-margin:hover, .icon-button:hover { text-decoration:none !important; } /*---- Geolocation ----*/ .date-published strong { color:#939393; } .date-created { color:#858585; } .map_sidepan .input_select { width:100%; } .map_sidepan .input_text { width:167px; margin-right:0px; } .map_sidepan .icon-button { margin:0; float:right; } .map_sidepan fieldset ul li { margin: 0; padding: 0 0 8px; } .map_sidepan .round-delete { margin: 7px 0 0 6px; } .resize-label { float:right; width:25px; height:19px; text-align:center; padding:5px 0 0 0; font-weight:bold; } .map-resizing-text { float:right; width:110px; font-size:14px; color:#444444; height:20px; text-align:center; padding:4px 0 0 0; } #geolocation .dataTables_wrapper { margin: 0 0 8px 0; } #geolocation .ui-accordion .ui-accordion-content { padding: 5px 10px 10px 10px; } .map_mapedit fieldset { border:1px solid #ccc; margin:0; padding:4px; } .ui-widget-content .poi_actions a { margin: 0 0 4px 0; font-size:12px; color:#007fb3; text-decoration:none; } .ui-widget-content .poi_actions a:hover { color:#007fb3; text-decoration:underline; } .ui-widget-content .poi_actions a.icon-button { color:#444444; text-decoration:none; } .ui-widget-content .poi_actions a.icon-button:hover { color:#fff; text-decoration:none; } .ui-widget-content .poi_actions a.icon-link .icon { margin:-2px 0 0 0; } .ui-widget-content .poi_actions a.icon-button { margin:0; } .ui-widget-content .poi_actions a.link { padding-right: 10px; }.ui-widget-content .poi_actions a.icon-link { padding-right: 0; } .map_mapedit .ui-state-default .ui-icon { background-image: url(images/ui-icons_007fb3_256x240.png); } .map_mapedit .ui-state-hover .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } /*---- END Geolocation ----*/ .article-title, .article-title-locked, .breadcrumb_active, h1 { color: #3B3B3B; float: left; font-size: 17px; height: 23px; line-height:120%; margin: 0; padding: 3px 40px 0 0; text-indent: 6px; font-weight: normal; } .article-title, .breadcrumb_active, h1 { color: #3B3B3B; } .article-title-locked { color: #de3d3d; background: transparent url(images/locked_big.png) no-repeat 0 50%; padding-left: 16px; } .breadcrumb_active { padding: 0 40px 0 0; text-indent: 6px; } fieldset li p { line-height:140%; } fieldset li { font-size:1.2em; line-height:140%; } fieldset > legend { font-size:12px; line-height:140%; color:#696969; margin-bottom: 0px; width: auto; border-bottom: none; } ul.tree.sortable .item fieldset .input_text { width: auto; margin-right:4px; float:none; } .main-edit-content fieldset .input_text, .comments-list-content fieldset .input_text, .post-comment-content fieldset .input_text { width: 497px; } /*----Author Management ----*/ .column-one { float:left; width:360px; margin:0 15px 30px 0; } .column-two { float:left; width:auto; margin-bottom:30px; } .search-box { height:25px; background:#FFFFFF url(images/search_box_bg.png) repeat-x 0 0; border: 1px solid #9D9D9D; border-width: 0 1px 0 1px; } .search-box input, .search-box .input-transparent { height:23px; background-color: transparent; background-image: none; padding:0; border:none; margin:1px 0 0 0; outline:none; float: left; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; text-indent: 3px; } .search-box .filter-button { background: transparent url(images/dropdown-arrow.png) no-repeat scroll right 9px; color: #646664; padding: 4px 14px 0 10px; text-decoration: none; float:right; font-size:11px; text-decoration:none; border-left:1px dotted #CCC; height: 19px; margin:1px 6px 0 0; outline:none; } .search-box .filter-button.close { background: transparent url(images/dropdown-arrow-close.png) no-repeat scroll right 8px; } .search-box .filter-button:hover { color: #007fb3; text-decoration:none; } .container { border:1px solid #CCC; border-width: 0 1px 1px 1px; padding: 20px 10px 10px 10px; background:#fafafa; background: -moz-linear-gradient(top, #e3e3e3 0, #fafafa 3px, #fafafa 3px, #fafafa 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e3e3e3), color-stop(2%, #fafafa), color-stop(2%, #fafafa), color-stop(100%, #fafafa)); display:block; } .datatable tr th.ui-state-default { border: 1px solid #CCC; border-width: 0 0 0 1px !important; } #gridtable .ui-widget-header { padding: 10px 10px 10px; } .datatable { border-color: #9D9D9D; border-style: solid; border-width: 1px 1px 1px 1px; width: 100%; } .datatable tr td, .datatable tr th { border-color: #EBEBEB; border-style: solid; border-width: 1px 0 0 1px; font-size: 12px; padding: 3px 5px; } .datatable tr td:first-child, .datatable tr th:first-child, .datatable tr th.ui-state-default:first-child { border-left-width:0 !important; } .ui-widget-header + .datatable { border-width: 0px 1px 1px 1px; } .datatable + .ui-widget-header { border-width: 0px 1px 1px 1px; } .dataTables_scrollHeadInner > .datatable { border-width: 0px 1px 0 1px; } .dataTables_scroll .datatable { border-width: 0px 1px 0 1px; } .author-list { overflow:hidden; } .author-details { } .author-details fieldset label { clear: left; color: #696969; display: block; float: left; font-size: 12px; font-weight: bold; line-height: 20px; margin: 0; padding: 0 0 4px; text-indent: 0; width:140px; } .author-details fieldset ul.nameList li label { width: 100px; } .author-details fieldset.frame ul li:last-child { padding-bottom: 0; } .author-details.ui-tabs { padding:10px; } .space-box { clear:both; height:16px; } .author-details h3 { font-size:17px; padding:6px 0 16px 0; } .author-details .frame { padding: 10px; } .author-details .frame:last-child { margin-bottom: 10px; } input.input_file { font-size: 12px; font-family:Arial, Helvetica, sans-serif; } /*--- FOOTER ---*/ .footer, .footer_plain { display:block; background:#f5f5f5; background: -moz-linear-gradient(top, #e3e3e3 0, #f5f5f5 2px, #f5f5f5 2px, #f5f5f5 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e3e3e3), color-stop(2%, #f5f5f5), color-stop(2%, #f5f5f5), color-stop(100%, #f5f5f5)); height:40px; border-top:1px solid #CCC; clear:both; color:#666; margin-top:20px; font-size:11px; line-height:140%; text-align:center; padding:10px 0 0 0; } .footer_plain { border-top:none; margin-top:20px; background:transparent; } .footer a, .footer_plain a { color:#015476; text-decoration:none; } .footer a:hover, .footer_plain a:hover { color:#1a8cbb; text-decoration:underline; } /*--- END FOOTER ---*/ /*--- New Login ---*/ .login_box { margin:40px auto 0 auto; text-align:center; width:420px; border:1px solid #CCC; border-width: 0 0 1px 0; padding: 0 0 16px 0; background: -moz-linear-gradient(center top , #f5f5f5 70%, #eeeeee 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(70%, #f5f5f5), color-stop(100%, #eeeeee)); } .login_box h2 { background:#f6f6f6; background: -moz-linear-gradient(center top , #fafafa 0pt, #f6f6f6 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(100%, #f6f6f6)); border:1px solid #afafaf; border-top-color:#FFF; border-left-color:#e5e5e5; border-right-color:#e5e5e5; margin:0 0 12px 0; padding:8px 0 8px 10px; font-size:15px; font-weight:bold; color:#444; text-align:left; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .login_box p { font-size: 1.2em; line-height: 1.5em; text-align: left; } .login_box a.goto { font-size: 1.2em; } .logobox { height:102px; text-align:center; } .login { margin:2px 0 0 4px; border:none; background:none; text-align:left; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .login td { border:none; background-color:transparent; color:#696969; } .login h2 { padding:7px 0 10px 0; } .light { color:#1683b0; } .alert { color:#C00; } /*--- END New Login ---*/ /*--- Main menu and sticky Toolbox fix ---*/ .sticky { z-index:100; } /*--- IMPORTANT: z-index of .fg-menu-container must be bigger then z-index of .sticky !! ---*/ /*--- IMPORTANT: z-index of .fg-menu-container must be bigger then z-index of geo-maps too !! ---*/ .fg-menu-container { z-index:2001; } /** plugins */ .table_actions { margin: 0 34px 8px; } form > .table_input { font-size: 1.1em; } /** media archive */ body > h2 { margin-left: 35px; } p.dates { margin: 0 0 8px; font-size: 1.3em; } .mediaplayer { margin: 8px 0; font-size: 1.1em; } dl.attachment { font-size: 1.3em; margin: 0 0 8px; } dl.attachment > * { margin-bottom: 3px; } dl.attachment dt { float: left; } .dataTables_paginate.ui-buttonset { height: auto; overflow: visible; } .dataTables_length { clear: both; } ul.rss { margin: 3px 0; padding: 0; } ul.rss > li { margin: 0; padding: 5px; font-size: 1.2em; } ul.rss li.even { background-color: #f5f5f5; } ul.rss p { width: 60em; margin: 3px 0 0; } ul.rss li a { color: #007fb3; } ul.rss li a:hover { text-decoration: underline; } ul#edit-images, ul#edit-files { height: 1%; overflow: hidden; } ul#edit-images li{ float: left; width: 300px; margin: 5px 0 0 5px; padding: 5px; border: 1px solid #ccc; } ul#edit-files li { float: left; width: 350px; margin: 5px 0 0 5px; padding: 5px; border: 1px solid #ccc; } ul#edit-files dl { display: inline-block; } ul#edit-images li > div, ul#edit-files li > div { height: 50px; overflow: hidden; padding-left: 10px; } #edit-images fieldset, #edit-files fieldset { margin: 5px; padding: 5px; border: 1px solid #ccc; } #edit-images a.copy-to-all, #edit-files a.copy-to-all { clear: left; display: block; width: 100%; } fieldset.controls, fieldset.buttons, fieldset.filters, fieldset.actions { margin: 13px 21px; padding: 10px; border: 1px solid #ccc; } fieldset.buttons.active { position: fixed; top: 0; left: -5px; background-color: #fff56e; opacity: 0.9; } fieldset.controls div { margin-bottom: 5px; } fieldset.filters select { margin-right: 13px; } fieldset dl { margin: 0 0 5px; } fieldset dl dd { margin-left: 0; } fieldset.closed { margin-bottom: -21px; border-width: 1px 0 0; -moz-border-radius: 0; border-radius: 0; } fieldset.filters a.reset { display: inline-block; margin: 8px 2px 0; font-size: 0.9em; } #mc_embed_signup { background: transparent url('images/bg-product-nav-swarm.png') no-repeat 90% 90%; } /*--- Comments tabs ---*/ .tab_active { border-left: 1px solid #777; border-top: 1px solid #777; border-right: 1px solid #777; -moz-border-radius: 2px 2px 0 0; } .tab_inactive { border: 1px solid #777; background-color: #CFCFCF; -moz-border-radius: 2px 2px 0 0; } /*--- plupload addon ---*/ .plupload-addon-bottom { margin:0 30px 10px 30px; border: 1px solid #9d9d9d; border-width: 1px; background:#f9f9f9; font-size:12px; padding:0 0 10px 0; } .plupload-addon-bottom .info { float:left; padding:5px 30px 0 10px; font-style:normal; } .plupload-addon-bottom .last { padding-right: 6px; } .plupload-addon-bottom h3 { font-size:12px; margin:-20px 0 20px 0; padding:10px; font-weight:normal; border-bottom:1px solid #CCC; background:#f4f4f4; } .plupload-addon-bottom .inputs { float:left; padding:0 0px 0 0px; font-style:normal; width:40%; } .plupload-addon-bottom .select-only { width:25%; min-width:240px; } .plupload-addon-bottom .inputs .input_text { width:100%; } .plupload-addon-bottom .inputs .input_select { width:100%; } .plupload-addon-bottom .inputs label { float:left; margin-right:10px; font-weight:bold; color:#606060; padding-top:5px; } .plupload-addon-bottom .buttons { float:right; padding-right:10px; } .plupload-addon-bottom .buttons .save-button{ margin:10px 0 0 0; } #uploader_error { background:#fce5e5; margin:0 30px; border: 1px solid #9d9d9d; border-width: 0 1px 1px 1px; border-bottom-color:#e4e4e4; padding: 0 0 0 10px; color:#dd0000; font-size: 12px; line-height:20px; } .upload-success, .upload-error { padding: 0 0 0 10px; font-size: 12px; line-height:20px; } .upload-success { border: 1px solid #65A539; color: #65A539; background-color: #EFF6EB; } .upload-error { background:#fce5e5; border: 1px solid #dd0000; color:#dd0000; } /*--- popup upload ---*/ .message-holder { height: 26px; } .message-holder .false { color: #cc0000; } /*--- System messages ---*/ .info_message { font-weight: bold; font-size: 10pt; color: #239f34; } .error_message { font-weight: bold; font-size: 10pt; color: #de3d3d; } /*--- Topics Popup ---*/ .pop-up h1 { padding:0 0 0 20px; margin: 10px 0 0; background:none; border-bottom: none; box-shadow:none; float:none; } body.pop-up { margin-top:120px; } .fixed-top { position:fixed; background:#f5f5f5; top:0; left:0; width:100%; } .pop-up ul.tree { width: 70%; padding:0 0 0 33px; } .fixed-top fieldset.buttons { margin-bottom:0; } .fixed-top fieldset.buttons .input_text { width: 40%; min-width:180px; } .pop-up p { font-size:1.2em; line-height:140%; } .pop-up > p { margin-left:32px; } /*--- Backup/Restore ---*/ .wrapper .table_list, .wrapper fieldset.buttons, .wrapper .box_table { margin-left:0; margin-right:0; } .wrapper .action_buttons { padding-left:0; } .mid-sized { width:60%; min-width:800px; } .full-sized { width:100%; } .box_table td label { font-size:13px; padding:0 7px 0 0; } fieldset { padding:10px; border:1px solid #cccccc; margin:10px 0; } /*--- User Management ---*/ .user-management { margin-bottom:10px; } .user-management fieldset:last-child { margin-bottom:0; } .user-management fieldset .input_text, .user-management fieldset .input_select { float:none; margin-right:4px; } .user-management fieldset { font-size:12px; } .user-management fieldset > legend { font-size:13px; } .user-management .info-text { color: #808080; float: none; font-size: 12px; padding: 0 20px 0 8px; } .user-management fieldset.plain label, .user-management fieldset.plain .input_text { float:left; clear:none; } .user-management fieldset.plain label { margin: 0 10px 0 20px; padding:2px 0 0 0; } .user-management fieldset.plain label:first-child { margin-left: 0; } .float-list { float:left; margin:0; padding:0; width:auto; } .float-list li { float:left; margin:0 0 2px 0; padding:0 20px 0 0; min-height:25px; } .user-management fieldset.plain .float-list .input_text { margin-right:0px; } .float-list li:last-child { padding:0; } .no-table-data { padding:10px; font-size:13px; border:1px solid #9d9d9d; background:#eeeeee; } .widget .wikipedia { padding: 0 8px 65px; background: transparent url('images/wikipedia-logo.png') no-repeat 5% 100%; border: none; } .widget .wikipedia input { line-height: 1em; padding: 5px; font-size: 1.1em; border: 1px solid #ccc; } .widget .wikipedia .search { width: 34em; background-color: #fff; opacity: 0.8; } table.message_box td { font-size: 1.2em; line-height: 1.5em; } /*--- TinyMCE Overrides ---*/ .defaultSkin table.mceLayout { width: 100% !important; } .map-thumb span { margin:0; padding:4px 0 4px 24px; font-size:12px; display:block; background:#f6f6f6 url(images/edit_small.png) no-repeat 7px 7px; border-top:1px solid #cccccc; } .map-thumb:hover span { color:#fff; background-color:#007eb1; background-position: 7px -18px; border-top:1px solid #007eb1; } .top-field, .top-field:last-child { margin-bottom:8px; } /* fg menu */ #menuLog { font-size:1.4em; margin:20px; } .hidden { position:absolute; top:0; left:-9999px; width:1px; height:1px; overflow:hidden; } .fg-button { margin:0 2px 0 0; padding: .4em 1em; text-decoration:none !important; cursor:pointer; position: relative; text-align: center; zoom: 1; } a.fg-button { font-size:11px !important; font-weight:bold !important; text-transform: uppercase; } .fg-button .fg-button-ui-icon { position: absolute; top: 50%; margin-top: -8px; left: 50%; margin-left: -8px; } a.fg-button { float:left; } button.fg-button { width:auto; overflow:visible; } /* removes extra button width in IE */ .fg-button-icon-left { padding-left: 2.1em; } .fg-button-icon-right { padding-right: 2.1em; } .fg-button-icon-left .fg-button-ui-icon { right: auto; left: .2em; margin-left: 0; } .fg-button-icon-right .fg-button-ui-icon { left: auto; right: .2em; margin-left: 0; } .fg-button-icon-solo { display:block; width:8px; text-indent: -9999px; } /* solo icon buttons must have block properties for the text-indent to work */ .fg-button.ui-state-loading .fg-button-ui-icon { background: url(/fg-menu/spinner_bar.gif) no-repeat 0 0; } ul.navigation { margin: 0; padding: 0; } ul.navigation li { float: left; } .content .pager { margin: 8px 0; font-size: 1.2em; } table + .pager { margin-top: 0; } .content p { font-size: 1.2em; } .content pre { font-size: 12px; } /*--- Media Box ---*/ div.image-thumbnail-container { float:left; width:80px; } ul span.caption p { margin: 0; padding: 0; } ul#edit-files h2 { margin: 0; padding: 8px; font-size: 1.2em; font-weight: bold; overflow: hidden; } .widget div.loading p { font-size: 1.3em; margin: 0; padding: 0.5em; } .pager.indent { padding: 3px; font-size: 1.1em; } ul.edit { margin: 0; padding: 0; font-size: 1.3em; } ul.edit li { width: 21em; margin: 0 0 5px; padding: 5px; background-color: #fff; -moz-box-shadow: 3px 3px 3px #ccc; -webkit-box-shadow: 3px 3px 3px #ccc; box-shadow: 3px 3px 3px #ccc; } ul.edit a.delete { float: right; color: #cc3333; } /*--//////////////////////////////////////// 11.05.2011 ////////////////////////////////////////--*/ .theme-settings { width:800px; } .theme-settings .dataTables_wrapper { margin:0; } .theme-settings .dataTables_wrapper .ui-widget-header { border-width: 0 0 1px 0; } .theme-edit { width: 90%; min-width: 1000px; padding: 10px; overflow:hidden; } .theme-edit .button { margin: 0 0 0 6px; } .theme-edit form dl { padding:0; border:none; } dl.right-floated { text-align:left; margin-left:0; } .theme-edit input[type="text"] { background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); } .cacheLifetime { font-size:12px; } .theme-edit .save-button-bar { float:none; height:30px; text-align:right; margin: 12px 0 10px 0; padding:0 8px 0 0; } .theme-edit .save-button-bar .save-button { margin: 0 0 0 10px; } .editor-toggle td { padding:8px 0 0 0; } /*--//////////////////////////////////////// 12.05.2011 ////////////////////////////////////////--*/ .versionHolder { padding-bottom:0px; } .versionHolder dl { overflow:hidden; padding:5px 0; box-shadow:0 0 0 !important; } .versionHolder dl dt { float:left; width:320px; margin:0px !important; } .versionHolder dl dt label { float:left; font-weight:bold; line-height:25px; } .versionHolder dl dd { float:left; width:400px; margin-bottom:12px; } .versionHolder dl dd input { float:left; width:40px; height:23px; margin-right:10px !important; } .versionHolder dl dd span { font-size:12px; font-style:italic; line-height:25px; } .themeSettingsTabs { position:relative; } .addNewOutput { position:absolute; right:0px; top:14px; display:block; padding-left:14px; color:#007fb3 !important; background:url(images/add.png) left 2px no-repeat; } .addNewOutput:hover { text-decoration:underline; } .themeSettingsTabsNav { background:none; border:none; border-bottom:1px solid #9d9d9d !important; } .themeSettingsTabsNav li { background:#ffffff !important; border:none !important; } .themeSettingsTabsNav li.ui-tabs-selected { border:1px solid #9d9d9d !important; border-bottom:none !important; } .themeSettingsTabsNav li a:hover { color:#444444 !important; } .templateSettings dl { overflow:hidden; padding:5px 0; box-shadow:0 0 0 !important; } .templateSettings dl dt { float:left; width:320px; margin:0px !important; } .templateSettings dl dt label { float:left; width:320px; font-weight:bold; line-height:25px; } .templateSettings dl dd { float:left; width:400px; margin-bottom:12px; } .templateSettings dl dd select { float:left; width:200px; } .themeArticleType { float:left; width:300px; margin-right:20px; padding-top:10px; } .themeArticleType h4 { padding:5px 10px; margin-top:0px; color:#000000; background:#ebebeb; } .themeArticleType span { display:block; font-weight:bold; font-size:13px; } .themeArticleType ul { margin-bottom:20px; } .themeArticleType ul li { height:25px; padding-left:15px; font-size:13px; line-height:56px; background:url(images/theme-settings-dotted-line.png) left top no-repeat; } .matchWithExisting { float:left; width:440px; padding-top:10px; } .matchWithExisting h4 { padding:5px 10px; margin-top:0px; color:#000000; background:#ebebeb; } .matchWithExisting ul li { overflow:hidden; padding:8px 0 2px 0; } .matchWithExisting ul li.withPadding { padding-left:25px; background:url(images/theme-settings-dotted-line.png) 10px -5px no-repeat; } .matchWithExisting ul li div { float:left; padding:5px 10px; margin-right:10px; background:#f1f1f1; -moz-border-radius: 3px; -webkit-border-radius: 3px; } .matchWithExisting ul li div input { float:left; margin:0px 5px 0 0; } .matchWithExisting ul li div label { display:block; float:left; line-height:normal; } .matchWithExisting ul li div.active { background:#c6dfe9; } .matchWithExisting ul li select { width:140px; } .themeSettingsBtn { float:right; } .currentDirectory { overflow:hidden; padding:0px; margin-top:0px; } .currentDirectory li { float:left; margin-right:5px; font-weight:bold; } .themeTemplatesActionHolder { padding:0px; border:none; } .themeTemplatesActionHolder select { width:150px; } .themeTemplatesTable { } .themeTemplatesTable tbody tr td a{ color:#047eb4; } .themeTemplatesTable tbody tr td a:hover { color:#047eb4; text-decoration:underline; } .upOneLevel { display:block; float:left; padding-left:15px; margin-left:5px; line-height:17px; background:url(images/up-one-level.png) left 4px no-repeat; } .themeTemplatesTable tbody tr td a.folder { display:block; float:left; padding-left:15px; background:url(images/theme-templates-folder.png) left 4px no-repeat; } .themeTemplatesTable tbody tr td a.file { display:block; float:left; padding-left:15px; background:url(images/theme-templates-file.png) left 4px no-repeat; } .actionDropDown { margin:0px !important; padding:0px !important; } .actionDropDown li { position:relative; float:right; } .actionDropDown li a { display:block; width:62px; height:18px; padding-left:8px; line-height:18px; color:#007fb3; text-align:left; background:url(images/actions-btn-bgr.png) 55px 0px no-repeat; -moz-border-radius: 3px; -webkit-border-radius: 3px; } .actionDropDown li a:hover, .actionDropDown li a.active { color:#ffffff !important; text-decoration:none !important; background-position:55px -18px; background-color:#9d9d9d; } .actionDropDown li ul { display:none; position:absolute; top:15px; left:0px; z-index:3; width:160px; margin:0px !important; padding:0px !important; border:1px solid #9d9d9d; } .actionDropDown li ul li { border-bottom:1px solid #e5e5e5; } .actionDropDown li ul li a, .actionDropDown li ul li a.active { width:135px; height:25px; padding:0 0 0 25px; line-height:25px; color:#444444 !important; text-decoration:none !important; background-color:#ffffff; } .actionDropDown li ul li a.newFolder { background:url(images/new-folder.png) 5px 6px no-repeat #ffffff; } .actionDropDown li ul li a.newTemplate { background:url(images/solo_icons.png) 7px -84px no-repeat #ffffff; } .actionDropDown li ul li a.rename { background:url(images/rename.png) 5px 6px no-repeat #ffffff; } .actionDropDown li ul li a.duplicate { background:url(images/duplicate.png) 5px 6px no-repeat #ffffff; } .actionDropDown li ul li a.delete { background:url(images/topics_delete.png) 5px 6px no-repeat #ffffff } .actionDropDown li ul li a:hover { color:#007fb3 !important; text-decoration:none !important; background-color:#f5f5f5 !important; } .actionDropDown li ul li ul { position:absolute; display:none; top:-1px; left:160px; width:160px; margin:0px !important; padding:0px !important; } .actionDropDown li ul li ul li a, .actionDropDown li ul li ul li a.active { width:140px !important; padding:0 10px !important; background-image:none !important; } ul.navigation { margin: 0; padding: 0; } ul.navigation li { float: left; } .content .pager { margin: 8px 0; font-size: 1.2em; } table + .pager { margin-top: 0; } .content p { font-size: 1.2em; } .content pre { font-size: 12px; } /*--- Media Box ---*/ div.image-thumbnail-container { float:left; width:80px; } ul#edit-files h2 { margin: 0; padding: 8px; font-size: 1.2em; font-weight: bold; overflow: hidden; } .widget div.loading p { font-size: 1.3em; margin: 0; padding: 0.5em; } .pager.indent { padding: 3px; font-size: 1.1em; } .main-menu-bar ul.navigation ul { display: none; } .datatable tr td.dataTables_empty { padding: 5px 0 5px 7px; } .action-list a.actionButton { color: #444444 !important; background-color:#ebebeb; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fafafa), to(#ebebeb)); background-image: -moz-linear-gradient(center top , #fafafa 0pt, #ebebeb 100%); border: 1px solid #9d9d9d; display: inline-block; height: 22px; line-height: 22px; padding: 0 10px 0 10px; font-size:12px; } .action-list a.actionButton:hover { color: #444444 !important; background-color:#d9d9d9; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fafafa), to(#d9d9d9)); background-image: -moz-linear-gradient(center top , #fafafa 0pt, #d9d9d9 100%); border-color: #656565; -moz-box-shadow: 0 1px 1px rgba(0,0,0,.20); -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.20); box-shadow: 0 1px 1px rgba(0,0,0,.20); } .comments-block .buttons a { margin: 0 8px 0 0; } .comments-block .action-list li { float: left; } .comments-block textarea { width: 99.5%; height: 8em; font-size: 1.2em; } abbr { border-bottom: 0.1em dotted; cursor: help; } #message.comment { position: static; } /* Set zindex for external toolbar, conflicts with jCrop */ .mceExternalToolbar { z-index: 500; } #fancybox-content { border-width: 0px !important; width: 100% !important; } ================================================ FILE: newscoop/admin-style/admin_stylesheet_context.css ================================================ .datatable { border: 1px solid #9d9d9d; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; background: #f9f9f9; margin: 5px 0 0; max-height: 330px; padding-bottom: 20px; } .item-active { background: #ebf5f9; } .ui-widget-header + .datatable { border-width: 1px 1px 1px 1px; } a { color: #007fb3; text-decoration:none; } .datatable tr td, .datatable tr th { border-color: #EBEBEB; border-style: solid; border-width: 0 0 0 0!important; font-size: 12px; padding: 0px 0px 0px 0px!important; } .ui-widget-header { border: 0px!important; } fieldset { border: 0px; } fieldset.closed { border-width: 1px 0 0 0!important; } .ui-buttonset .ui-button { margin-right: 2px; } .ui-widget-header{ background: none !important; font-weight: normal !important; } .dataTables_info { color: #696969; font-size: 11px; font-weight: normal; margin: 3px 0 0; padding: 6px 0; } #drag-here-to-add-to-list { border: 2px #CCCCCC dashed; height: 45px; width: 439px; margin: 4px 9px; padding: 20px 5px 0px 26px; color: #CCCCCC; font-size: 20px; } /* Fix for author and creator filter in content search */ .smartlist fieldset div.select2 { margin-right: 13px; width: 256px; } ================================================ FILE: newscoop/admin-style/admin_stylesheet_new.css ================================================ small, address { font-size: 10px; color:#6c6c6c; } a { color: #007fb3; text-decoration:none; } form { display:inline; } img { border-style: none; } hr { color: #CCC; background-color: #CCC; border:none; height:1px; } .input_text_area { border: 1px solid #9D9D9D; background:#fff url(images/input_bg.png) repeat-x 0 0; text-indent: 3px; font-size: 13px; } .input_textarea { border: 1px solid #777; background-color: #f0f0ff; font-size: 9pt; } .input_text_disabled { border: 1px solid grey; background-color: #f0f0ff; text-indent: 3px; font-size: 9pt; } .input_checkbox { height:13px; width:13px; margin:0; padding:0; border:none; outline:none; } .table_list { border: 1px solid #9d9d9d; font-size: 12px; margin-left: 30px; margin-right: 0; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .table_list td { padding: 3px 6px; } .table_list_header td { background: -moz-linear-gradient(center top , #fbfbfb 0pt, #f8f8f8 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fbfbfb), color-stop(100%, #f8f8f8)); border-bottom: 1px solid #9d9d9d; color: #444444; font-weight: normal; padding: 5px 6px; } .table_list_header td table td { background: transparent; border-bottom: none; color: #444444; font-weight: normal; padding: 0 3px; } .list_row_odd { background-color: #fff; } .list_row_even { background-color:#F9F9F9; } .indent { margin-left: 30px; } .action_buttons { padding-left: 30px; font-size:12px; } .action_buttons td { padding-right: 6px; } .box_table { background-color: #fff; border: 1px solid #9d9d9d; float: none; margin: 5px 5px 0 30px; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .box_table td { font-size: 13px; padding: 6px 8px; } .box_table td.pass table { padding: 0; } .box_table td.pass table td, .box_table td table td table td { padding: 0; } .box_table .input_text { margin-right:7px; float:none; } fieldset.controls, fieldset.buttons, fieldset.filters, fieldset.actions { margin: 15px 30px; padding: 10px; border: 1px solid #ccc; } fieldset.buttons { background-color: #fff; } fieldset.buttons.active { position: fixed; top: 0; left: -5px; background-color: #ffec85; opacity: 0.9; } fieldset.controls div { margin-bottom: 5px; } fieldset.filters select { margin-right: 13px; } fieldset dl { margin: 0 0 5px; } fieldset dl dd { margin-left: 0; } fieldset.closed { margin-bottom: -21px; border-width: 1px 0 0; -moz-border-radius: 0; border-radius: 0; } fieldset.filters a.reset { display: inline-block; margin: 8px 2px 0; font-size: 0.9em; } /*------ Tree View & Sortable ----------*/ /** basic tree */ ul.tree { width: 300px; } ul.tree li { width: 100%; padding: 3px; border-top: 1px solid #ccc; } ul.tree li.odd { background-color: #f9f9f9; } ul.tree li li { border-top: none; } ul.tree img { border: none; } ul.tree li > span, ul.tree li > a { display: block; float: left; width: 10px; text-align: center; cursor: default; } ul.tree li > a { cursor: pointer; } ul.tree label.match { font-weight: bold; color: #006699; } /** sortable tree */ ul.tree.sortable { width: auto; height: 1%; overflow: hidden; margin: 0 23px 30px 30px; padding: 0; } ul.tree.sortable li { float: left; clear: left; width: auto; margin: 8px 0 0; padding: 0; background-color: transparent; border: none; } ul.tree.sortable a, ul.tree.sortable span { display: inline; float: none; width: auto; cursor: auto; } ul.tree.sortable .item { float: left; clear: left; background: #f8f8f8; border: 1px solid #ccc; border-top-width: 0; cursor: move; background: #ffffff url(images/topics_bg.png) repeat-x 0 0; } ul.tree.sortable .item:first-child { border-top-width: 1px; } ul.tree.sortable .item > div { width: 600px; height: 1%; overflow: hidden; margin: 0; padding: 6px 5px 6px 18px; font-size: 1.2em; background: transparent url(images/topics_drag.png) no-repeat 6px 6px; } ul.tree.sortable .item_alt { float: left; clear: left; background: #f8f8f8; border: 1px solid #ccc; cursor: move; } ul.tree.sortable .item_alt > div { width: 600px; height: 1%; padding: 6px 5px 6px 18px; background: transparent url(images/topics_drag.png) no-repeat 6px 6px; } ul.tree.sortable .open { background: transparent none no-repeat 3px 3px; } ul.tree.sortable .open.closed { padding-left: 18px; background-image: url('images/topics_open.png'); cursor: pointer; } ul.tree.sortable .open.opened { padding-left: 18px; background-image: url('images/topics_close.png'); cursor: pointer; } ul.tree.sortable .open * { cursor: pointer; } ul.tree.sortable .item.active { background: #f9f9f9; } ul.tree.sortable .item.match { background: #fff56e; } ul.tree.sortable .item strong { color: #007fb3; cursor: pointer; } ul.tree.sortable fieldset { margin: 16px 5px 16px 0; padding: 10px; border: 1px solid #ccc; } ul.tree.sortable fieldset select { margin-bottom: 3px; } ul.tree.sortable .icon { position: relative; display: block; float: right; width: 11px; height: 11px; margin: 3px 5px 0 3px; background: transparent none; cursor: pointer; text-decoration: none; font-size: 0.9em; text-indent:9999px; overflow:hidden; } ul.tree.sortable .icon span { display: block; position: absolute; top: 0; left: 0; width: 14px; height: 14px; background: transparent none no-repeat 0 0; z-index: 1000; cursor: pointer; } ul.tree.sortable .edit { float: right; margin-right: 12px; padding-top: 1px; padding-left: 15px; font-size: 1em; background: transparent url('images/topics_edit.png') no-repeat 0 50%; cursor: pointer; } ul.tree.sortable .icon.delete { float: right; margin-top: 2px; width: 14px; height: 14px; } ul.tree.sortable .icon.delete span { background-image: url('images/topics_delete.png'); } /*------ END Tree View & Sortable ----------*/ fieldset.controls .input_text, fieldset.buttons .input_text, fieldset.filters .input_text, fieldset.actions .input_text { float:none; margin-right:4px; } fieldset.controls .input_text, fieldset.buttons .input_text, fieldset.filters .input_text, fieldset.actions .input_text { float:none; margin-right:4px; } fieldset.controls .input_text { width: 413px; } fieldset.controls.search .input_text { width: 540px; } /*------ Smartlist ----------*/ .dataTables_wrapper { margin: 16px 30px; } .author-list .dataTables_wrapper { margin: 0; } #tabs .dataTables_wrapper { margin: 13px 0 0; } .dataTables_scroll .dataTables_wrapper table.datatable { width: 90%; } .dataTables_filter { padding: 0 0 12px 0; font-size:12px; color:#696969; } .dataTables_filter .input_text { float:none; width:200px; margin-left:6px; } .dataTables_length { padding: 10px 0 ; font-size:12px; color:#696969; font-weight:normal; } .smartlist td { width: 5em; } .smartlist td.id { width: 1em; padding: 3px 0; text-align: center; } .smartlist td.name { width: 11em; overflow: hidden; } .smartlist td.flag { width: 50px; } .smartlist td.date { width: 6em; } .smartlist tbody tr.even td { background-color: #f9f9f9; } .smartlist tbody tr.odd td { background-color: #fff; } .smartlist tbody tr.odd.locked td { background-color: #fce7f2; } .smartlist tbody tr.even.locked td { background-color: #fcdaec; } .smartlist tbody tr.odd.selected td { background-color: #EDF6F9; } .smartlist tbody tr.even.selected td { background-color: #E5F2F7; } .smartlist tbody tr:hover td, .datatable tbody tr:hover td { background-color: #cce5f0 !important; } .smartlist .ui-widget-header { padding: 12px 12px 10px 12px; background:#fff; } .DataTables_sort_wrapper .ui-icon { display: block; float: left; } .dataTables_paginate { clear: both; margin: 3px 0; } .ui-buttonset { height: 1%; overflow: hidden; } .ui-button { float: left; cursor: pointer; padding: 2px 7px; font-size:12px; font-weight:normal; } .ui-buttonset .ui-button { margin-right: 2px; } .smartlist fieldset { float: left; width: 30%; margin-right: 0; margin-left: 8px; } /*.smartlist fieldset:first-child { margin-left: 30px; }*/ .smartlist fieldset:first-child { float: none; margin: 16px 30px; width: auto; } .smartlist fieldset.buttons { float: none; margin: 16px 30px; width: auto; background:#fff; } .smartlist fieldset select { width: 256px; } .smartlist fieldset div.select2 { margin-right: 13px; width: 256px; } .smartlist .table { clear: both; } .smartlist .extra { margin-top: 8px; } .smartlist a.detach { margin-left: 5px; color: red; font-weight: bold; cursor: pointer; } .dataTables_info { font-weight:normal; font-size:11px; color:#696969; padding-bottom:10px; } .smartlist .ui-state-disabled, .smartlist .ui-widget-content .ui-state-disabled, .smartlist .ui-widget-header .ui-state-disabled, .smartlist .ui-state-disabled:hover, .smartlist .ui-widget-content .ui-state-disabled:hover, .smartlist .ui-widget-header .ui-state-disabled:hover { background-image: none; background-color:#FFF; border:1px solid #cecece; color:#b2b3b2; } /*------ END Smartlist ----------*/ /*------ Author Management ----------*/ .aliasContainer { float:left; } .authorAliasItem { height:25px; margin-top:8px; } .aliasContainer .authorAliasItem:first-child { margin-top:0px; } .authorThumb { background:#f5f5f5 url(images/author_thumb_bg_110x130.png) no-repeat 50% 50%; border: 1px solid #9d9d9d; float: left; height: 130px; padding: 0; width: 110px; overflow:hidden; } fieldset ul.nameList { float: left; margin-left: 28px; width: 400px; } .textHolder { float: left; margin: 0 16px 0 0; padding: 7px 0 10px 0; width: 260px; } .textHolder textarea{ width: 100%; margin:0; } .omega { margin-right: 0; width: auto; } .authorlist span.author-type-label { color: #8a8a8a; font-weight: bold; } . /*------ END Author Management ----------*/ /*------ DataTables ----------*/ .DataTables_sort_wrapper .ui-icon { display: block; float: left; } .datatable tbody tr.even td { background-color: #F9F9F9; } .datatable tbody tr.selected td { background-color: #EDF6F9; } .datatable tbody tr.even.selected td { background-color: #E5F2F7; } /*------ END DataTables ----------*/ /*------ Locations box ----------*/ .geomap_list_location_enabled {} .geomap_list_location_disabled { text-decoration: line-through; } .map-control-wrapper { margin-left: 182px; } .map-control-wrapper h4 { float:left; font-size:13px; font-weight:bold; line-height:140%; padding:0; margin:10px 0 1px 15px; } .geo_map_name { margin:0; clear:both; padding-top: 10px; font-size: 13px; } /*------ END Locations box ----------*/ /** fixes */ body > .links { margin: 13px 35px 0; font-size: 1.3em; } .ColVis_collection.ui-buttonset { height: auto; } fieldset.plain strong { line-height: 22px; font-size: 1.2em; } td.name .ui-icon { float: left; margin: -2px 0 0 -2px; cursor: help; } /*------ System Preferences ----------*/ .system_pref { background-color: #fff; border: 1px solid #9d9d9d; float: none; margin: 30px 30px; padding: 20px 20px 50px 20px; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .system_pref h3 { font-size: 18px; border-bottom: 1px solid #ccc; padding: 0 0 8px 0; } .system_pref input { float:none !important; background: #f0f0f0; -webkit-box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.15); -moz-box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.15); box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.15); } .system_pref input:focus { background-color: #fff; } .system_pref input[type=radio] { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin-left: 4px; } .system_pref dl { } .system_pref dl dl { margin: -5px 0 30px 30px; } .system_pref dl dl dd { margin-bottom: 10px; padding-top: 0; } .system_pref dl dl h4 { margin: 0; font-size: 13px; } .system_pref dt { margin-bottom: 8px; padding-top: 10px; } .system_pref dt label { font-weight: bold; } .system_pref dd { margin-bottom: 12px; margin-left: 0; font-size: 13px; } .system_pref dd .input_select { background-color: #f0f0f0; min-width: 280px; } .system_pref dd .input_select.wide { min-width: 348px; } .system_pref dd .input_select:focus { background-color: #fff; } .system_pref dd p { margin-top: 7px; max-width: 460px; font-size: 13px; } .system_pref dd.border, .system_pref dt.border { border-top:1px solid #ccc; margin-top: 25px; padding-top: 20px; } .alerts { padding: 8px 35px 8px 14px; margin-bottom: 20px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); font-size: 14px; line-height: 20px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .alert-success { color: #468847; background-color: #dff0d8; border-color: #d6e9c6; } .alert-danger { color: #b94a48; background-color: #f2dede; border-color: #eed3d7; } .popover-content { font-weight: normal; background-color: #F4FBFF; } .admin-font-size { font-size: 10px; font-family: Arial, Helvetica, sans-serif; } .ns_container { background-color: #fff; border: 1px solid #9d9d9d; float: none; margin: 10px 30px 30px 30px; padding: 20px 20px 30px 20px; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .ns_container h3 { font-size: 18px; border-bottom: 1px solid #ccc; padding: 0 0 8px 0; } .ns_container input { float:none !important; background: #f0f0f0; -webkit-box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.15); -moz-box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.15); box-shadow: inset 0px 1px 2px rgba(0, 0, 0, 0.15); } .ns_container input:focus { background-color: #fff; } .ns_container input[type=radio] { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin-left: 4px; } .action-button { font-size: 12px; font-weight: normal; line-height: 120%; list-style: none; margin: 0 6px 0 0; position: relative; text-decoration: none; border: 1px solid #9D9D9D; background-color: #f6f6f6; display: block; background: -moz-linear-gradient(top, #fafafa 0, #f6f6f6 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(100%, #f6f6f6)); overflow: hidden; padding: 3px 10px 4px 10px; color: #3B3B3B; } .action-button:hover { text-decoration: none; border: 1px solid #007fb3; color: #fff; background-color: #007fb3; background: -moz-linear-gradient(top, #409fc6 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #409fc6), color-stop(100%, #007fb3)); } .action-button .glyphicon { color: #007fb3; } .action-button .glyphicon:hover, .action-button:hover .glyphicon { color: white; } ================================================ FILE: newscoop/admin-style/app.css ================================================ #app { font-size: 0.8em; padding: 13px; } #app table { margin: 8px 0; } #app input[type="number"] { border: 1px solid #ccc; } #ips-table { width: 99%; } #ips-table input { width: 55px; } ================================================ FILE: newscoop/admin-style/buttons.css ================================================ @charset "utf-8"; /* CSS Document */ button, input[type="submit"], button.prime, input[type="submit"].prime, .btn.prime { margin:0 6px 0 0; background: -moz-linear-gradient(center top , #FAFAFA 0%, #F6F6F6 100%); background: linear-gradient(top, #FAFAFA 0%, #F6F6F6 100%); background: -webkit-linear-gradient(top, #FAFAFA 0%, #F6F6F6 100%); border: 1px solid #9D9D9D; color: #444444; font-family: Arial,Helvetica,sans-serif; font-size: 12px; font-weight: normal; line-height: 17px; outline: medium none; padding: 3px 9px; z-index: 2000; } button:hover, input[type="submit"]:hover { background: -moz-linear-gradient(center top , #FAFAFA 0%, #eaeaea 100%); background: linear-gradient(top, #FAFAFA 0%, #eaeaea 100%); background: -webkit-linear-gradient(top, #FAFAFA 0%, #eaeaea 100%); border: 1px solid #818181; color: #000; box-shadow:0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 1) inset; } button:active, input[type="submit"]:active { background: -moz-linear-gradient(center top , #FAFAFA 0%, #F6F6F6 100%); background: linear-gradient(top, #FAFAFA 0%, #F6F6F6 100%); background: -webkit-linear-gradient(top, #FAFAFA 0%, #F6F6F6 100%); border: 1px solid #9D9D9D; color: #000; box-shadow:0 1px 2px rgba(0, 0, 0, 0.3) inset; } button.prime, input[type="submit"].prime, .btn.prime { background: -moz-linear-gradient(center top , #2290bd 0%, #007fb3 100%); background: linear-gradient(top, #2290bd 0%, #007fb3 100%); background: -webkit-linear-gradient(top, #2290bd 0%, #007fb3 100%); border: 1px solid #007fb3; color: #FFF; } button.prime:hover, input[type="submit"].prime:hover, .btn.prime:hover { background: -moz-linear-gradient(center top , #409FC6 0%, #007fb3 100%); background: linear-gradient(top, #409FC6 0%, #007fb3 100%); background: -webkit-linear-gradient(top, #409FC6 0%, #007fb3 100%); border: 1px solid #005E85; box-shadow:0 1px 2px rgba(0, 0, 0, 0.2), 0 1px 0px rgba(255, 255, 255, 0.3) inset; color: #FFF; } button.prime:active, input[type="submit"].prime:active, .btn.prime:active { background: -moz-linear-gradient(center top , #409FC6 0%, #007fb3 100%); background: linear-gradient(top, #409FC6 0%, #007fb3 100%); background: -webkit-linear-gradient(top, #409FC6 0%, #007fb3 100%); border: 1px solid #005E85; box-shadow:0 1px 2px rgba(0, 0, 0, 0.4) inset; color: #FFF; } /* Bootstrap Buttons ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////*/ .btn { display: inline-block; padding: 3px 12px; margin-bottom: 0; font-size: 12px; line-height: 17px; text-decoration:none; color: #444444; text-align: center; vertical-align: middle; background-color: #f5f5f5; background-image: -moz-linear-gradient(top, #FAFAFA, #F6F6F6); background-image: -ms-linear-gradient(top, #FAFAFA, #F6F6F6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#FAFAFA), to(#F6F6F6)); background-image: -webkit-linear-gradient(top, #FAFAFA, #F6F6F6); background-image: -o-linear-gradient(top, #FAFAFA, #F6F6F6); background-image: linear-gradient(top, #FAFAFA, #F6F6F6); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#F6F6F6', GradientType=0); border: 1px solid #9d9d9d; cursor: pointer; *margin-left: .3em; } .btn:hover { background-color: #eaeaea; background: -moz-linear-gradient(center top , #FAFAFA 0%, #eaeaea 100%); background: linear-gradient(top, #FAFAFA 0%, #eaeaea 100%); background: -webkit-linear-gradient(top, #FAFAFA 0%, #eaeaea 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#eaeaea', GradientType=0); border: 1px solid #818181; color: #000; box-shadow:0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 1) inset; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } .btn:active, .btn.active, .btn.active:hover { background-color: #F6F6F6; background: -moz-linear-gradient(center top , #FAFAFA 0%, #F6F6F6 100%); background: linear-gradient(top, #898989 0%, #FAFAFA 100%); background: -webkit-linear-gradient(top, #898989 0%, #F6F6F6 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#F6F6F6', GradientType=0); border: 1px solid #9D9D9D; color: #000; box-shadow:0 1px 2px rgba(0, 0, 0, 0.3) inset; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } .btn.active:hover { cursor:default; } .btn-group { position: relative; *zoom: 1; *margin-left: .3em; } .btn-group:before, .btn-group:after { display: table; content: ""; } .btn-group:after { clear: both; } .btn-group:first-child { *margin-left: 0; } .btn-group.pull-right { float:right; } .btn-group .btn { border-radius: 0 0 0 0; float: left; margin-left: -1px; position: relative; } .btn-group .btn:active, .btn-group .btn.active, .btn-group .btn.active:hover { background-color: #898989; background: -moz-linear-gradient(center top , #898989 0%, #9a9a9a 100%); background: linear-gradient(top, #898989 0%, #9a9a9a 100%); background: -webkit-linear-gradient(top, #898989 0%, #9a9a9a 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#898989', endColorstr='#9a9a9a', GradientType=0); border: 1px solid #626262; color: #f4f4f4; text-shadow: 0 -1px 0px rgba(0, 0, 0, 0.3); box-shadow:0 2px 2px rgba(0, 0, 0, 0.3) inset; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } .btn-group .btn.active:hover { cursor:default; } .btn-group .btn:first-child { margin-left: 0; -webkit-border-top-left-radius: 3px; -moz-border-radius-topleft: 3px; border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-bottomleft: 3px; border-bottom-left-radius: 3px; } .btn-group .btn:last-child { -webkit-border-top-right-radius: 3px; -moz-border-radius-topright: 3px; border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomright: 3px; border-bottom-right-radius: 3px; } /* ICONS //////////////////////////////////////////////////////////////////////////*/ [class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; line-height: 14px; vertical-align: text-top; background-image: url(images/glyphicons-halflings.png); background-position: 14px 14px; background-repeat: no-repeat; *margin-right: .3em; } [class^="icon-"]:last-child, [class*=" icon-"]:last-child { *margin-left: 0; } .icon-white { background-image: url(images/glyphicons-halflings-white.png); } .icon-glass { background-position: 0 0; } .icon-music { background-position: -24px 0; } .icon-search { background-position: -48px 0; } .icon-envelope { background-position: -72px 0; } .icon-heart { background-position: -96px 0; } .icon-star { background-position: -120px 0; } .icon-star-empty { background-position: -144px 0; } .icon-user { background-position: -168px 0; } .icon-film { background-position: -192px 0; } .icon-th-large { background-position: -216px 0; } .icon-th { background-position: -240px 0; } .icon-th-list { background-position: -264px 0; } .icon-ok { background-position: -288px 0; } .icon-remove { background-position: -312px 0; } .icon-zoom-in { background-position: -336px 0; } .icon-zoom-out { background-position: -360px 0; } .icon-off { background-position: -384px 0; } .icon-signal { background-position: -408px 0; } .icon-cog { background-position: -432px 0; } .icon-trash { background-position: -456px 0; } .icon-home { background-position: 0 -24px; } .icon-file { background-position: -24px -24px; } .icon-time { background-position: -48px -24px; } .icon-road { background-position: -72px -24px; } .icon-download-alt { background-position: -96px -24px; } .icon-download { background-position: -120px -24px; } .icon-upload { background-position: -144px -24px; } .icon-inbox { background-position: -168px -24px; } .icon-play-circle { background-position: -192px -24px; } .icon-repeat { background-position: -216px -24px; } .icon-refresh { background-position: -240px -24px; } .icon-list-alt { background-position: -264px -24px; } .icon-lock { background-position: -287px -24px; } .icon-flag { background-position: -312px -24px; } .icon-headphones { background-position: -336px -24px; } .icon-volume-off { background-position: -360px -24px; } .icon-volume-down { background-position: -384px -24px; } .icon-volume-up { background-position: -408px -24px; } .icon-qrcode { background-position: -432px -24px; } .icon-barcode { background-position: -456px -24px; } .icon-tag { background-position: 0 -48px; } .icon-tags { background-position: -25px -48px; } .icon-book { background-position: -48px -48px; } .icon-bookmark { background-position: -72px -48px; } .icon-print { background-position: -96px -48px; } .icon-camera { background-position: -120px -48px; } .icon-font { background-position: -144px -48px; } .icon-bold { background-position: -167px -48px; } .icon-italic { background-position: -192px -48px; } .icon-text-height { background-position: -216px -48px; } .icon-text-width { background-position: -240px -48px; } .icon-align-left { background-position: -264px -48px; } .icon-align-center { background-position: -288px -48px; } .icon-align-right { background-position: -312px -48px; } .icon-align-justify { background-position: -336px -48px; } .icon-list { background-position: -360px -48px; } .icon-indent-left { background-position: -384px -48px; } .icon-indent-right { background-position: -408px -48px; } .icon-facetime-video { background-position: -432px -48px; } .icon-picture { background-position: -456px -48px; } .icon-pencil { background-position: 0 -72px; } .icon-map-marker { background-position: -24px -72px; } .icon-adjust { background-position: -48px -72px; } .icon-tint { background-position: -72px -72px; } .icon-edit { background-position: -96px -72px; } .icon-share { background-position: -120px -72px; } .icon-check { background-position: -144px -72px; } .icon-move { background-position: -168px -72px; } .icon-step-backward { background-position: -192px -72px; } .icon-fast-backward { background-position: -216px -72px; } .icon-backward { background-position: -240px -72px; } .icon-play { background-position: -264px -72px; } .icon-pause { background-position: -288px -72px; } .icon-stop { background-position: -312px -72px; } .icon-forward { background-position: -336px -72px; } .icon-fast-forward { background-position: -360px -72px; } .icon-step-forward { background-position: -384px -72px; } .icon-eject { background-position: -408px -72px; } .icon-chevron-left { background-position: -432px -72px; } .icon-chevron-right { background-position: -456px -72px; } .icon-plus-sign { background-position: 0 -96px; } .icon-minus-sign { background-position: -24px -96px; } .icon-remove-sign { background-position: -48px -96px; } .icon-ok-sign { background-position: -72px -96px; } .icon-question-sign { background-position: -96px -96px; } .icon-info-sign { background-position: -120px -96px; } .icon-screenshot { background-position: -144px -96px; } .icon-remove-circle { background-position: -168px -96px; } .icon-ok-circle { background-position: -192px -96px; } .icon-ban-circle { background-position: -216px -96px; } .icon-arrow-left { background-position: -240px -96px; } .icon-arrow-right { background-position: -264px -96px; } .icon-arrow-up { background-position: -289px -96px; } .icon-arrow-down { background-position: -312px -96px; } .icon-share-alt { background-position: -336px -96px; } .icon-resize-full { background-position: -360px -96px; } .icon-resize-small { background-position: -384px -96px; } .icon-plus { background-position: -408px -96px; } .icon-minus { background-position: -433px -96px; } .icon-asterisk { background-position: -456px -96px; } .icon-exclamation-sign { background-position: 0 -120px; } .icon-gift { background-position: -24px -120px; } .icon-leaf { background-position: -48px -120px; } .icon-fire { background-position: -72px -120px; } .icon-eye-open { background-position: -96px -120px; } .icon-eye-close { background-position: -120px -120px; } .icon-warning-sign { background-position: -144px -120px; } .icon-plane { background-position: -168px -120px; } .icon-calendar { background-position: -192px -120px; } .icon-random { background-position: -216px -120px; } .icon-comment { background-position: -240px -120px; } .icon-magnet { background-position: -264px -120px; } .icon-chevron-up { background-position: -288px -120px; } .icon-chevron-down { background-position: -313px -119px; } .icon-retweet { background-position: -336px -120px; } .icon-shopping-cart { background-position: -360px -120px; } .icon-folder-close { background-position: -384px -120px; } .icon-folder-open { background-position: -408px -120px; } .icon-resize-vertical { background-position: -432px -119px; } .icon-resize-horizontal { background-position: -456px -118px; } /* CUSTOM ICONS //////////////////////////////////////////////////////////////////////////*/ [class^="viewmode-"], [class*=" viewmode-"] { display: inline-block; width: 26px; height: 14px; line-height: 14px; vertical-align: text-top; background-image: url(images/icons_view_mode.png); background-position: 0 0; background-repeat: no-repeat; *margin-right: .3em; margin-top:1px; } .viewmode-list { background-position: 0 0; } .btn:active .viewmode-list, .btn.active .viewmode-list { background-position: -40px 0; } .viewmode-grid { background-position: 0 -25px; } .btn:active .viewmode-grid, .btn.active .viewmode-grid { background-position: -40px -25px; } ================================================ FILE: newscoop/admin-style/calendar/fullcalendar.css ================================================ /* * FullCalendar v1.5.2 Stylesheet * * Copyright (c) 2011 Adam Shaw * Dual licensed under the MIT and GPL licenses, located in * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. * * Date: Sun Aug 21 22:06:09 2011 -0700 * */ .fc { direction: ltr; text-align: left; } .fc table { border-collapse: collapse; border-spacing: 0; } html .fc, .fc table { font-size: 1em; } .fc td, .fc th { padding: 0; vertical-align: top; } /* Header ------------------------------------------------------------------------*/ .fc-header td { white-space: nowrap; } .fc-header-left { width: 25%; text-align: left; } .fc-header-center { text-align: center; } .fc-header-right { width: 25%; text-align: right; } .fc-header-title { display: inline-block; vertical-align: top; } .fc-header-title h2 { margin-top: 0; white-space: nowrap; } .fc .fc-header-space { padding-left: 10px; } .fc-header .fc-button { margin-bottom: 1em; vertical-align: top; } /* buttons edges butting together */ .fc-header .fc-button { margin-right: -1px; } .fc-header .fc-corner-right { margin-right: 1px; /* back to normal */ } .fc-header .ui-corner-right { margin-right: 0; /* back to normal */ } /* button layering (for border precedence) */ .fc-header .fc-state-hover, .fc-header .ui-state-hover { z-index: 2; } .fc-header .fc-state-down { z-index: 3; } .fc-header .fc-state-active, .fc-header .ui-state-active { z-index: 4; } /* Content ------------------------------------------------------------------------*/ .fc-content { clear: both; z-index : 0; } .fc-view { width: 100%; /* needed for view switching (when view is absolute) */ overflow: hidden; } /* Cell Styles ------------------------------------------------------------------------*/ .fc-widget-header, /* , usually */ .fc-widget-content { /* , usually */ border: 1px solid #ccc; } .fc-state-highlight { /* today cell */ /* TODO: add .fc-today to */ background: #ffc; } .fc-cell-overlay { /* semi-transparent rectangle while dragging */ background: #9cf; opacity: .2; filter: alpha(opacity=20); /* for IE */ } /* Buttons ------------------------------------------------------------------------*/ .fc-button { position: relative; display: inline-block; cursor: pointer; } .fc-state-default { /* non-theme */ border-style: solid; border-width: 1px 0; } .fc-button-inner { position: relative; float: left; overflow: hidden; } .fc-state-default .fc-button-inner { /* non-theme */ border-style: solid; border-width: 0 1px; } .fc-button-content { position: relative; float: left; height: 1.9em; line-height: 1.9em; padding: 0 .6em; white-space: nowrap; } /* icon (for jquery ui) */ .fc-button-content .fc-icon-wrap { position: relative; float: left; top: 50%; } .fc-button-content .ui-icon { position: relative; float: left; margin-top: -50%; *margin-top: 0; *top: -50%; } /* gloss effect */ .fc-state-default .fc-button-effect { position: absolute; top: 50%; left: 0; } .fc-state-default .fc-button-effect span { position: absolute; top: -100px; left: 0; width: 500px; height: 100px; border-width: 100px 0 0 1px; border-style: solid; border-color: #fff; background: #444; opacity: .09; filter: alpha(opacity=9); } /* button states (determines colors) */ .fc-state-default, .fc-state-default .fc-button-inner { border-style: solid; border-color: #ccc #bbb #aaa; background: #F3F3F3; color: #000; } .fc-state-hover, .fc-state-hover .fc-button-inner { border-color: #999; } .fc-state-down, .fc-state-down .fc-button-inner { border-color: #555; background: #777; } .fc-state-active, .fc-state-active .fc-button-inner { border-color: #555; background: #777; color: #fff; } .fc-state-disabled, .fc-state-disabled .fc-button-inner { color: #999; border-color: #ddd; } .fc-state-disabled { cursor: default; } .fc-state-disabled .fc-button-effect { display: none; } /* Global Event Styles ------------------------------------------------------------------------*/ .fc-event { border-style: solid; border-width: 0; font-size: .85em; cursor: default; } a.fc-event, .fc-event-draggable { cursor: pointer; } a.fc-event { text-decoration: none; } .fc-rtl .fc-event { text-align: right; } .fc-event-skin { border-color: #36c; /* default BORDER color */ background-color: #36c; /* default BACKGROUND color */ color: #fff; /* default TEXT color */ } .fc-event-inner { position: relative; width: 100%; height: 100%; border-style: solid; border-width: 0; overflow: hidden; } .fc-event-time, .fc-event-title { padding: 0 1px; } .fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/ display: block; position: absolute; z-index: 99999; overflow: hidden; /* hacky spaces (IE6/7) */ font-size: 300%; /* */ line-height: 50%; /* */ } /* Horizontal Events ------------------------------------------------------------------------*/ .fc-event-hori { border-width: 1px 0; margin-bottom: 1px; } /* resizable */ .fc-event-hori .ui-resizable-e { top: 0 !important; /* importants override pre jquery ui 1.7 styles */ right: -3px !important; width: 7px !important; height: 100% !important; cursor: e-resize; } .fc-event-hori .ui-resizable-w { top: 0 !important; left: -3px !important; width: 7px !important; height: 100% !important; cursor: w-resize; } .fc-event-hori .ui-resizable-handle { _padding-bottom: 14px; /* IE6 had 0 height */ } /* Fake Rounded Corners (for buttons and events) ------------------------------------------------------------*/ .fc-corner-left { margin-left: 1px; } .fc-corner-left .fc-button-inner, .fc-corner-left .fc-event-inner { margin-left: -1px; } .fc-corner-right { margin-right: 1px; } .fc-corner-right .fc-button-inner, .fc-corner-right .fc-event-inner { margin-right: -1px; } .fc-corner-top { margin-top: 1px; } .fc-corner-top .fc-event-inner { margin-top: -1px; } .fc-corner-bottom { margin-bottom: 1px; } .fc-corner-bottom .fc-event-inner { margin-bottom: -1px; } /* Fake Rounded Corners SPECIFICALLY FOR EVENTS -----------------------------------------------------------------*/ .fc-corner-left .fc-event-inner { border-left-width: 1px; } .fc-corner-right .fc-event-inner { border-right-width: 1px; } .fc-corner-top .fc-event-inner { border-top-width: 1px; } .fc-corner-bottom .fc-event-inner { border-bottom-width: 1px; } /* Reusable Separate-border Table ------------------------------------------------------------*/ table.fc-border-separate { border-collapse: separate; } .fc-border-separate th, .fc-border-separate td { border-width: 1px 0 0 1px; } .fc-border-separate th.fc-last, .fc-border-separate td.fc-last { border-right-width: 1px; } .fc-border-separate tr.fc-last th, .fc-border-separate tr.fc-last td { border-bottom-width: 1px; } .fc-border-separate tbody tr.fc-first td, .fc-border-separate tbody tr.fc-first th { border-top-width: 0; } /* Month View, Basic Week View, Basic Day View ------------------------------------------------------------------------*/ .fc-grid th { text-align: center; } .fc-grid .fc-day-number { float: right; padding: 0 2px; } .fc-grid .fc-other-month .fc-day-number { opacity: 0.3; filter: alpha(opacity=30); /* for IE */ /* opacity with small font can sometimes look too faded might want to set the 'color' property instead making day-numbers bold also fixes the problem */ } .fc-grid .fc-day-content { clear: both; padding: 2px 2px 1px; /* distance between events and day edges */ } /* event styles */ .fc-grid .fc-event-time { font-weight: bold; } /* right-to-left */ .fc-rtl .fc-grid .fc-day-number { float: left; } .fc-rtl .fc-grid .fc-event-time { float: right; } /* Agenda Week View, Agenda Day View ------------------------------------------------------------------------*/ .fc-agenda table { border-collapse: separate; } .fc-agenda-days th { text-align: center; } .fc-agenda .fc-agenda-axis { width: 50px; padding: 0 4px; vertical-align: middle; text-align: right; white-space: nowrap; font-weight: normal; } .fc-agenda .fc-day-content { padding: 2px 2px 1px; } /* make axis border take precedence */ .fc-agenda-days .fc-agenda-axis { border-right-width: 1px; } .fc-agenda-days .fc-col0 { border-left-width: 0; } /* all-day area */ .fc-agenda-allday th { border-width: 0 1px; } .fc-agenda-allday .fc-day-content { min-height: 34px; /* TODO: doesnt work well in quirksmode */ _height: 34px; } /* divider (between all-day and slots) */ .fc-agenda-divider-inner { height: 2px; overflow: hidden; } .fc-widget-header .fc-agenda-divider-inner { background: #eee; } /* slot rows */ .fc-agenda-slots th { border-width: 1px 1px 0; } .fc-agenda-slots td { border-width: 1px 0 0; background: none; } .fc-agenda-slots td div { height: 20px; } .fc-agenda-slots tr.fc-slot0 th, .fc-agenda-slots tr.fc-slot0 td { border-top-width: 0; } .fc-agenda-slots tr.fc-minor th, .fc-agenda-slots tr.fc-minor td { border-top-style: dotted; } .fc-agenda-slots tr.fc-minor th.ui-widget-header { *border-top-style: solid; /* doesn't work with background in IE6/7 */ } /* Vertical Events ------------------------------------------------------------------------*/ .fc-event-vert { border-width: 0 1px; } .fc-event-vert .fc-event-head, .fc-event-vert .fc-event-content { position: relative; z-index: 2; width: 100%; overflow: hidden; } .fc-event-vert .fc-event-time { white-space: nowrap; font-size: 10px; } .fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */ position: absolute; z-index: 1; top: 0; left: 0; width: 100%; height: 100%; background: #fff; opacity: .3; filter: alpha(opacity=30); } .fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */ .fc-select-helper .fc-event-bg { display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */ } /* resizable */ .fc-event-vert .ui-resizable-s { bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */ width: 100% !important; height: 8px !important; overflow: hidden !important; line-height: 8px !important; font-size: 11px !important; font-family: monospace; text-align: center; cursor: s-resize; } .fc-agenda .ui-resizable-resizing { /* TODO: better selector */ _overflow: hidden; } ================================================ FILE: newscoop/admin-style/calendar/timepicker.css ================================================ @CHARSET "UTF-8"; /* css for timepicker */ .ui-timepicker-div .ui-widget-header{ margin-bottom: 8px; } .ui-timepicker-div dl{ text-align: left; } .ui-timepicker-div dl dt{ height: 25px; } .ui-timepicker-div dl dd{ margin: -25px 0 10px 65px; } .ui-timepicker-div td { font-size: 90%; } ================================================ FILE: newscoop/admin-style/comments.css ================================================ body#comments { } .commentsHolder { width: 920px; } #showComments { } #showComments fieldset { padding: 10px; } #showComments fieldset ul { overflow: hidden; } #showComments fieldset ul li { float: left; height: 25px; min-width: 100px; margin-right: 8px; padding: 0px 10px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border--radius: 4px; -khtml-border-radius: 4px; } #showComments fieldset ul li.published, #showComments fieldset ul li.approved { border: 1px solid #cccccc; background: #fff; } #showComments fieldset ul li.new { background: #eaf7da; border: 1px solid #bee78d; } /*#showComments fieldset ul li.approved { background: #ccecff; border: 1px solid #7ac8ff; }*/ #showComments fieldset ul li.hidden { background: #f2f2f2; border: 1px solid #cccccc; } #showComments fieldset ul li.deleted { background: #ffd9da; border: 1px solid #ffabad; } #showComments fieldset ul li.none { background: #ffffff; border: 1px solid #f0f0f0; } #showComments fieldset ul li.image { background: #ffffff; border: 1px solid #f0f0f0; } #showComments fieldset ul li.document { background: #ffffff; border: 1px solid #f0f0f0; } #showComments fieldset ul li input { float: left; margin: 6px 6px 0 0; } #showComments fieldset ul li label { float: left; font-size: 12px; font-weight: bold; line-height: 25px; } #showComments fieldset ul li.published label, #showComments fieldset ul li.approved label { color: #585858; } #showComments fieldset ul li.new label { color: #006b0e; } /*#showComments fieldset ul li.approved label { color: #004987; }*/ #showComments fieldset ul li.hidden label { color: #969696; } #showComments fieldset ul li.deleted label { color: #9e0013; } .basic-search-holder { margin-bottom: 8px; } #commentFilterSearchHolder { position: relative; padding: 0 0 20px; margin-bottom: 15px; border-top: 1px solid #cccccc; } #commentFilterSearch { overflow: hidden; display: none; } #commentFilterSearch fieldset { margin: 0px; border-top: none; } #commentFilterSearch fieldset ul li { overflow: hidden; } #commentFilterSearch ul li select { float: left; width: 100px; margin-right: 10px; } #commentFilterSearch ul li input { float: left; width: 200px; margin-right: 10px; } #commentFilterSearch ul li a { float: left; height: 23px; margin: 0px; padding: 0px; } #commentFilterSearch ul li a span { margin-top: 3px; } #commentFilterTrigger { position: absolute; right: 0px; bottom: 0px; display: block; height: 20px; padding: 0 10px 0 22px; background: url("images/dropdown-arrow.png") no-repeat 8px 5px #ffffff; border: 1px solid #cccccc; border-top: none; outline: none; } .collapsed { background-image: url("images/dropdown-arrow-close.png") !important; } #actionExpand { overflow: hidden; margin-bottom: 0; } #actionExpand fieldset { margin-top: 0px; } /* #actionExpand fieldset.right { float: right; }*/ select.actions { width: 100px; margin-right: 10px; } #actionExpand fieldset a { line-height: 24px; color: #007FB3; float:right; } #actionExpand fieldset a:hover { text-decoration: underline; } #actionExpand fieldset label { margin-right: 10px; line-height: 24px; } .commentsHolder table { margin-bottom: 1px !important; } .commentsHolder table tbody tr:hover td { background: none !important; } .commentsHolder table thead tr th { text-align: left; } .commentsHolder table tbody tr td { padding: 0px; } .commentsHolder table tbody tr td table { border: none; } .commentsHolder .index { padding-top: 7px; text-align: center; vertical-align: top; border: 0px; display: block; font-weight: normal; } .commentsHolder table tbody tr td table tbody tr td { padding: 5px; vertical-align: top; border: 0px; } .commentUserHolder { position: relative; padding-left: 60px; } .commentUserHolder div { position: absolute; left: 0px; top: 3px; width: 50px; height: 50px; background: #e6e6e6; border: 1px solid #a6a6a6; } .commentUserHolder p { margin: 0px; font-size: 12px; color: #444444; line-height: 17px; } .commentUserHolder p a { color: #007FB3; } .commentUserHolder p a:hover { text-decoration: underline; } .dateCommentHolder,.dateCommentHolderEdit, .dateCommentHolderReply { position: relative; padding-right: 12px; } .dateCommentHolder h4,.dateCommentHolderEdit h4, .dateCommentHolderReply h4 { margin: 1px 0 4px 0; font-style: italic; font-weight: bold; color: #000000; font-size:12px; -webkit-margin-end: 37px; } .dateCommentHolder h4 span,.dateCommentHolder h4 span.date, .dateCommentHolderEdit h4 span, .dateCommentHolderEdit h4 span.date, .dateCommentHolderReply h4 span, .dateCommentHolderReply h4 span.date { color: #858585; font-weight: normal; } .dateCommentHolder h4 span.commentSubject, .dateCommentHolderEdit h4 span.commentSubject, .dateCommentHolderReply h4 span.commentSubject { font-weight: bold; color: #000000; padding-right: 53px; display: inline; } .dateCommentHolderEdit h4 span.commentSubject, .dateCommentHolderReply h4 span.commentSubject { display:none; } .ratingHolder { position: absolute; right: 12px; top: 0px; } .ratingHolder .thumbs { font-size: 11px; border-left: 1px solid #ccc; line-height: 16px; background: url(images/thumbs_up-down.png) no-repeat; padding-left: 20px; } .ratingHolder .thumbs:first-child { border-left: none; padding-right: 6px; } .ratingHolder .thumbs.up { background-position: 6px 2px; color: #008700; } .ratingHolder .thumbs.down { background-position: 6px -28px; color: #ad0000; } .dateCommentHolder p,.dateCommentHolderEdit p,.dateCommentHolderReply p { margin: 0px; font-size:12px; } .dateCommentHolder fieldset,.dateCommentHolderEdit fieldset, .dateCommentHolderReply fieldset, .dateCommentHolder fieldset:first-child, .dateCommentHolderEdit fieldset:first-child, .dateCommentHolderReply fieldset:first-child { padding: 0px; margin: 0px; border: none; float: none; margin-top: 10px; width: 100%; } .dateCommentHolder fieldset label,.dateCommentHolderEdit fieldset label,.dateCommentHolderReply fieldset label { display: block; margin-bottom: 5px; color: #696969; font-weight: bold; } .dateCommentHolder fieldset input,.dateCommentHolderEdit fieldset input,.dateCommentHolderReply fieldset input { display: block; width: 100%; margin-bottom: 5px; } .dateCommentHolder fieldset textarea,.dateCommentHolderEdit fieldset textarea,.dateCommentHolderReply fieldset textarea { width: 100%; height: 100px; margin-bottom: 10px; } .dateCommentHolder fieldset div input,.dateCommentHolderEdit fieldset div input, .dateCommentHolderReply fieldset div input { float: left; width: auto !important; } .dateCommentHolder h3,.dateCommentHolderEdit h3, .dateCommentHolder h3,.dateCommentHolderReply h3 { padding: 20px 0 10px; } .commentArticleHolder { } .commentArticleHolder p { margin: 0px 0 20px; line-height: 17px; } .commentArticleHolder p a { text-decoration: none; color: #007FB3; } .commentArticleHolder p a:hover { text-decoration: underline; } .commentArticleHolder p span { font-size: 11px; font-style: italic; } .goToArticle { display: inline-block; padding-left: 14px; color: #007FB3 !important; font-size: 11px; background: url(images/go-to-article.png) left center no-repeat; } .goToArticle:hover { text-decoration: underline; } .commentBtns { height: 30px; background: rgba(212, 212, 212, 0.5); visibility: hidden; } .commentBtns ul { overflow: hidden; padding-left: 280px; margin: 0px; height: 25px; padding-top: 5px; } .commentBtns ul li { float: left; margin-right: 5px; display: block; height: 20px; line-height: 18px; padding: 0; } .commentBtns ul li.last { float: right; } .commentBtns ul li a,.commentBtns ul li a.link { display: block; float: left; height: 18px; padding: 0 5px; line-height: 18px; color: #007FB3; } .commentBtns ul li a.link { padding-left: 24px; line-height: 20px; line-height: 22px; color: #007FB3; /*border-left: 1px solid #cccccc;*/ } .commentBtns ul li a.link .icon { left: 6px; margin: 0 3px 0 0; overflow: hidden; position: absolute; top: 2px; width: 16px; } .commentBtns ul li a.quickEditBtn { padding-left: 25px; line-height: 20px; background: url(images/quick-edit-btn.png) 10px 4px no-repeat; border-left: 1px solid #cccccc; } .commentBtns ul li a.addRatingBtn { padding-left: 25px; line-height: 20px; background: url(images/add-rating-btn.png) 10px 4px no-repeat; border-left: 1px solid #cccccc; } .commentBtns ul li a.new, .commentBtns ul li.new { color: #006b0e; background: #eaf7da; border: 1px solid #2a8921; } .commentBtns ul li a.approved, .commentBtns ul li.approved { color: #585858; background: #fff; border: 1px solid #5b5b5b; } .commentBtns ul li.hidden, .commentBtns ul li.hidden { color: #969696; background: #f2f2f2; border: 1px solid #838383; } .commentBtns ul li.new, .commentBtns ul li.approved, .commentBtns ul li.hidden { padding-right:10px; border-radius: 4px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -khtml-border-radius: 3px; margin-right:4px; } .commentBtns ul li.hidden { margin-right:16px; } .commentBtns ul li a.deleted { color: #9e0013; background: #ffd9da; border: 1px solid #ffabad; } .commentBtns ul li a.banUser, a.banUser { color: #000000 !important; background-color:#ff9c9c; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffd9da), to(#ff9c9c)); background-image: -moz-linear-gradient(center top , #ffd9da 0pt, #ff9c9c 100%); border: 1px solid #dc4e4e; display: inline-block; height: 18px; line-height: 18px; padding: 0 11px 0 5px; margin-top:3px; } .commentBtns ul li a.actionButton { color: #444444 !important; background-color:#ebebeb; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fafafa), to(#ebebeb)); background-image: -moz-linear-gradient(center top , #fafafa 0pt, #ebebeb 100%); border: 1px solid #9d9d9d; display: inline-block; height: 20px; line-height: 20px; padding: 0 10px 0 10px; } .commentBtns ul li a.actionButton:hover { color: #444444 !important; background-color:#d9d9d9; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fafafa), to(#d9d9d9)); background-image: -moz-linear-gradient(center top , #fafafa 0pt, #d9d9d9 100%); border-color: #656565; -moz-box-shadow: 0 1px 1px rgba(0,0,0,.20); -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.20); box-shadow: 0 1px 1px rgba(0,0,0,.20); } .commentBtns ul li a.new:hover { border: 1px solid #2a8921; } .commentBtns ul li a.approved:hover { border: 1px solid #5b5b5b; } .commentBtns ul li a.hidden:hover { border: 1px solid #838383; } .commentBtns ul li a.deleted:hover { border: 1px solid #ce3843; } .commentBtns ul li a.banUser span, a.banUser span { display: block; height: 18px; padding-left: 20px; background: url(images/ban-user-icon.png) left 3px no-repeat; } .commentBtns ul li a.banUser:hover, a.banUser:hover { border: 1px solid #9a0000; background-color:#ff7575; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffd9da), to(#ff7575)); background-image: -moz-linear-gradient(center top , #ffd9da 0pt, #ff7575 100%); color: #000000 !important; text-decoration:none !important; } .dataTables_wrapper .commentId { width: 3%; } .dataTables_wrapper .commentUser { width: 27%; } .dataTables_wrapper .commentTimeCreated { width: 305px; } .dataTables_wrapper .commentMessage { width: 46%; } .dataTables_wrapper .commentThread { width: 24%; } .dataTables_wrapper .commentThreadOrder { width: 110px; } .commentsHolder .dataTables_wrapper { margin: 0; } .commentsHolder p { font-size:12px; } .hidden { overflow: hidden !important; position: inherit !important; width: auto !important; position:static!important; } .dataTables_filter input[type="text"] { background:transparent url(images/searchfield_bg.png) no-repeat scroll 0 0; border: 1px solid #9D9D9D; float: none; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; width: 60%; text-indent: 23px; } .datatable input[type="checkbox"] { height:13px; width:13px; }' .commentsHolder .smartlist .ui-widget-header { background: none; color: #444444; font-weight: bold; } .commentsHolder .smartlist .ui-widget-header:first-child { border-width: 0 0 1px 0; padding:0; } .commentsHolder .smartlist .ui-widget-header:last-child { border-width: 0; padding:6px 0; } .commentsHolder .dataTables_filter { clear:left; padding:0; } .commentsHolder .dataTables_length { padding: 0 0 10px 0; vertical-align: top; float:right; line-height:23px; } .commentsHolder .ui-widget-header select, .dataTables_actions .actions { background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px !important; height: 25px; margin: 0 0 0 0px !important; min-width:60px; padding: 2px 2px 2px 0; vertical-align: top; } .commentsHolder .dataTables_actions { padding: 0 0 10px 0; vertical-align: top; line-height:21px; } .commentsHolder .dataTables_actions a { font-size:12px; color:#007fb3; padding: 0; margin: 0 0 0 10px; line-height:23px; font-weight:normal; display:inline-block; border: 0px solid black !important; background: none !important; } .commentsHolder .dataTables_actions a span { float:left; margin-top:3px; padding-right:2px; } .commentsHolder .dataTables_actions a:hover { text-decoration:underline; } .commentsHolder .dataTables_actions select { width: 180px; } /*---////////// Status Colors //////////---*/ .datatable tr.status_approved, .datatable tr.status_processed { background:#fff; } .datatable tr.status_new { background:#EAF7DA; } .datatable tr.status_hidden, .datatable tr.status_starred { background:#f2f2f2; } .datatable tr.status_deleted { background:#ffe6e7; } .commentAction { display: none; } .user-blocked { color:#b30000; background:url(images/ban-user-icon.png) no-repeat 0 center; padding:0 0 0 16px; } .user-blocked-avatar, .commentUserHolder div.user-blocked-avatar { border:1px solid #b30000; } .commentBtns ul li input[type="radio"], .commentBtns ul li label { float:left; } .commentBtns ul li label { line-height:16px; padding-top:2px; } .commentsHolder .smartlist fieldset:first-child, .commentsHolder .smartlist fieldset { margin: 10px 0; } .commentsHolder input [type="select"] { background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 25px; margin: 0; padding: 2px 2px 2px 0; vertical-align: top; } ================================================ FILE: newscoop/admin-style/common.css ================================================ @charset "utf-8"; /* CSS Document */ ul.navigation { margin: 0; padding: 0; display:block; height:25px; } ul.navigation li { float: left; margin-right:10px; } .actions ul.navigation li { font-size: 12px; font-weight: normal; line-height: 120%; list-style: none; margin: 0 6px 0 0; padding: 0; position: relative; text-decoration: none; border: 1px solid #9D9D9D; background-color: #f6f6f6; display:block; background: -moz-linear-gradient(top, #fafafa 0, #f6f6f6 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(100%, #f6f6f6)); overflow:hidden; } .actions ul.navigation li:hover { text-decoration: none; border: 1px solid #007fb3; color: #fff; background-color: #007fb3; background: -moz-linear-gradient(top, #409fc6 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #409fc6), color-stop(100%, #007fb3)); } .actions ul.navigation li a { padding: 4px 10px 5px 10px; display:block; color: #3B3B3B; } .actions ul.navigation li a:hover { color: #fff; } .actions ul.navigation li a.upload, .actions ul.navigation li a.download, .actions ul.navigation li a.edit, .actions ul.navigation li a.add { padding-left: 20px; background-image:url(images/solo_icons.png); background-repeat:no-repeat; } .actions ul.navigation li a.upload { background-position: 5px 5px; } .actions ul.navigation li a.upload:hover { background-position: -395px 5px; } .actions ul.navigation li a.download { background-position: 5px -24px; } .actions ul.navigation li a.download:hover { background-position: -395px -24px; } .actions ul.navigation li a.edit { background-position: 5px -54px; } .actions ul.navigation li a.edit:hover { background-position: -395px -54px; } .actions ul.navigation li a.add { background-position: 5px -85px; } .actions ul.navigation li a.add:hover { background-position: -395px -85px; } form dt { font-weight: bold; padding: 3px 5px 3px 2px; } dl.zend_form { border: none !important; -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1); box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1); width: auto !important; } dl.zend_form dt { margin-top: 8px; } dl.zend_form dt:first-child { margin-top: 0; } form > dl.zend_form { border:1px solid #9d9d9d; padding-bottom:12px; } dl.zend_form dt:first-child { margin-top:0; } dl.zend_form input[type="text"], dl.zend_form input[type="password"] { background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); } dl.zend_form input[type="text"]:focus, dl.zend_form input[type="password"]:focus { border: 1px solid #00b5f1; /*-moz-box-shadow: 0px 0px 3px rgba(0, 180, 240, 0.3); -webkit-box-shadow: 0px 0px 3px rgba(0, 180, 240, 0.3); box-shadow: 0px 0px 3px rgba(0, 180, 240, 0.3);*/ } dl.zend_form input[type="password"] { background-color: #f8f8f8; } dl.zend_form input[type="submit"], dl.zend_form button { background: -moz-linear-gradient(center top , #fafafa 0pt, #f6f6f6 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(100%, #f6f6f6)); border: 1px solid #9d9d9d; color: #444444; font-family: Arial,Helvetica,sans-serif; font-size: 12px; font-weight: normal; line-height: 17px; margin: 0 6px 0 0; outline: medium none; padding: 3px 9px 3px; } dl.zend_form input[type="submit"]:hover, dl.zend_form .button:hover { background: #007FB3; background: -moz-linear-gradient(center top , #2390BD 0pt, #007FB3 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #2390BD), color-stop(100%, #007FB3)); border: 1px solid #007FB3; color: #FFFFFF; } dl.zend_form input[type="submit"]:disabled, dl.zend_form button:disabled, dl.zend_form input[type="submit"]:disabled:hover, dl.zend_form button:disabled:hover { background: -moz-linear-gradient(center top , #fdfdfd 0pt, #fbfbfb 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fdfdfd), color-stop(100%, #fbfbfb)); border: 1px solid #cecece; color: #b2b3b2; } /** Forms theme */ form dl { margin: 1em 0; padding: 8px; background-color: #fff; border: 1px solid #ccc; } form dt, form dd { margin-left: 0; } form dt { padding: 3px 5px; font-weight: bold; } form dd input[type="text"] { width: 30em; } form dd input[type="password"] { width: 18em; } form dd input[type="text"]:focus, form dd input[type="password"]:focus { border: 1px solid #00b5f1; } form dd ul.errors { padding: 3px 8px; } form dd ul.errors li { font-size: 1.1em; color: #cc0000; } dl.zend_form dd#submit-element { text-align:right } dl.zend_form dd#submit-element input[type="submit"], dl.zend_form dd#submit-element button { margin: 0 0 0 6px; } /** Actions theme */ .content > .actions { margin: 1em 0; font-size: 1.2em; } .content > .actions ul { margin: 0; padding: 0; height: 1%; overflow: hidden; } .content > .actions li { float: left; margin: 0 0 0 5px; padding: 0 0 0 5px; border-left: 1px solid #ccc; } .content > .actions li:first-child { border-left: 0; padding-left: 0; } .filter .zend_form { width: 100%; } .tiny .zend_form { width: 25%; } .medium .zend_form { width: 620px; } .popup .zend_form { border: none; padding: 0 0 12px 0; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; margin:0; } form.popup dd input[type="text"] { width: 99%; } ================================================ FILE: newscoop/admin-style/content.css ================================================ body h1 { float: none; margin: 0; padding: 13px 30px 0; } /** Icons */ a.icon:hover .ui-icon { background-image: url('custom-theme/images/ui-icons_d00000_256x240.png'); } .icon .ui-icon { position: relative; top: 0; left: 0; background-image: url('custom-theme/images/ui-icons_007fb3_256x240.png'); } a.ui-icon-wrapper { position: relative; padding-left: 16px; } a.ui-icon-wrapper span { position: absolute; top: -2px; left: 0; } /** Messages */ .message { margin: 1em 0; padding: 9px; background-color: #fff; border: 1px solid #a9a9a9; -moz-box-shadow: 2px 2px 3px #ccc; -webkit-box-shadow: 2px 2px 3px #d4d4d4; box-shadow: 2px 2px 3px #e5e5e5; } .message:first-child { margin-top: 0; } .message p { margin: 0; padding: 0; font-size: 2em; } .message.error { color: #cc0000; } /** Actions */ .content .actions { margin: 1em 0; font-size: 1.2em; } .content .actions ul { margin: 0; padding: 0; height: 1%; overflow: hidden; } .content .actions li { float: left; margin: 0 0 0 5px; padding: 0 0 0 5px; border-left: 1px solid #ccc; } /*.content .actions li:first-child { border-left: 0; padding-left: 0; }*/ /** Lists */ ul.edit { margin: 0; padding: 0; font-size: 1.3em; } ul.edit li { height: 33px; line-height: 33px; margin: 10px 0 0; padding: 0 9px; font-weight: bold; background-color: #fafafa; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #f5f5f5)); border: 1px solid #a9a9a9; -moz-box-shadow: 2px 2px 3px #ccc; -webkit-box-shadow: 2px 2px 3px #d4d4d4; box-shadow: 2px 2px 3px #e5e5e5; } ul.edit li:first-child { margin-top: 0; } ul.edit li a.delete { float: right; margin-top: 8px; font-weight: normal; } .resource-group { width: 500px; margin: 0 13px 13px 0; padding: 8px; background-color: #fff; border: 1px solid #9D9D9D; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .content-sidebar .resource-group { float: none; margin-right: 0; } .resource-group.layout, .resource-group.system { clear: left; } .resource-group h2 { margin: 0 0 3px; padding: 0; font-size: 1.5em; color: #333; } .resource-group h3 { margin: 5px 0 0 !important; padding: 7px 5px 6px 28px; } ul.resource { margin: 0; padding: 0; } ul.resource li { margin: 3px 0 0; padding: 5px; background-color: #efefef; } ul.resource li.all, ul.resource li.all:hover { margin-top: -8px; padding-top: 0; padding-bottom: 3px; background-color: transparent; } ul.resource li.deny { background-color: #fae9e9; } ul.resource li:hover { background-color: #cce5f0; } ul.resource input { float: left; } ul.resource label { display: block; margin: 0 0 0 20px; padding: 3px 0 0 3px; cursor: pointer; } .resource-group.ui-accordion .ui-accordion-content { padding: 10px 0 10px !important; } /* Theme edit --------------------------------- */ .theme-edit dl.zend_form { box-shadow: none; width:100%; margin: 6px 0 10px 0; } .theme-edit .zend_form dd.buttons { margin-top: 10px; padding: 0; display:block; text-align:right; } .theme-edit .zend_form dd { margin: 0; padding: 0; display:inline; } .theme-edit .zend_form dd input[type="file"] { width: 30%; } .theme-edit .zend_form dd input[type="button"], .theme-edit .zend_form dd .geo_filtering_button { background: -moz-linear-gradient(center top , #FAFAFA 0pt, #F6F6F6 100%) repeat scroll 0 0 transparent; border: 1px solid #9D9D9D; color: #444444; cursor: pointer; margin: -6px 6px 0 0; padding: 6px 7px 3px 4px; } .theme-edit .zend_form dd input[type="button"]:hover, .theme-edit .zend_form dd .geo_filtering_button:hover { background: #007FB3; background: -moz-linear-gradient(center top , #2390BD 0pt, #007FB3 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #2390BD), color-stop(100%, #007FB3)); border: 1px solid #007FB3; color: #FFFFFF; } .theme-edit fieldset dl { margin:0; } dl dd .info-text { padding: 0; margin: 0 0 10px 0; float: none; font-weight: normal !important; } .theme-edit #EditAreaArroundInfos_cField { text-align:right; margin-bottom:8px; } .theme-edit .zend_form dd input[type="text"] { width:40%; } .theme-edit .save-button-bar { padding:0; margin:0; float:right; } .theme-edit .area_toolbar { background-color: #F5F5F5 !important; } .theme-edit dl.zend_form:last-child { margin: 6px 0 0 0; } #template-edit-area-element textarea { margin: 0; padding: 5px 0 0 0; /*width: 998px;*/ text-indent: 3px; width: 90%; min-width: 1000px; } .edit-image { margin: 8px 0; height: 1%; overflow: hidden; } .edit-image a { display: block; float: left; padding: 5px; font-size: 1.3em; background-color: #fff; text-align: left; } .iframe .content { margin: 5px; } .iframe .zend_form { width: 503px; } .simple-tabs .ui-state-active a:link, .simple-tabs .ui-state-active a:visited { color: #444444; } .actions ul.navigation li.margin { margin-left:25px; } button:hover .ui-icon-polygon, .ui-icon-polygon:hover { background: transparent url(images/geo_polygon_blue.png) no-repeat; } .ui-icon-polygon { float: left; margin: -3px 6px 0px 3px; display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; height: 22px; width: 24px; background: transparent url(images/geo_polygon_off.png) no-repeat; } .geo_filtering_button { background: #f6f6f6; } .geo_filtering-label { } /* Context Box ---------------------------------------------- */ #context-box { padding: 10px; height: 660px; width: 1100px; background:#FFF; margin: 0 auto; } #context-box .toolbar { min-height: 35px; padding: 6px 4px; background:none; box-shadow:none; border:none; } #context-box h2 { color:#444444; width:50%; margin: 0 6px; } .context-content { background: #f5f5f5; border: 1px solid #ccc; overflow:hidden; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; height:610px; } .context-block { width:44.9%; height:550px; float:left; border:1px solid #9d9d9d; background:#FFF; padding:10px; font-size: 12px; font-family:Arial, Helvetica, sans-serif; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); } /* Left block */ .context-search { margin: 22px 11px 22px 22px; color: #444444; height: 550px; overflow-y: auto; } .context-search .search { background-image: url("images/searchfield_bg.png"); border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; height: 23px; margin: 0; padding: 0 6px 0 20px; text-indent: 3px; width:94.4%; font-size: 12px; font-family:Arial, Helvetica, sans-serif; color: #444444; } .context-search-results { border: 1px solid #9d9d9d; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; background: #f9f9f9; margin: 5px 0 0; max-height: 330px; padding-bottom: 20px; } .context-search .context-item { border-bottom:1px solid #cbcbcb; position:relative; padding:5px 5px 5px 26px; } .context-drag-topics a { width:10px; background: url(images/topics-drag-context.png) repeat-y 0 0; position:absolute; top: 5px; left: 6px; bottom: 4px; } .context-drag-topics a:hover { width:10px; background: url(images/topics-drag-context.png) repeat-y -10px 0; position:absolute; top: 5px; left: 6px; bottom: 4px; } .context-item-header { height:13px; padding: 2px 0; display:block; font-size:11px; } .context-item-date { color: #999; float:left; padding: 1px 0px; } a.view-article { float:right; margin: 0 2px 0 0; padding: 1px 6px; } a.view-article:hover { float:right; margin: 0 2px 0 0; padding: 1px 6px; background:#75bad6; color: #FFF; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .context-search .context-item-summary { padding: 4px 0; } .context-search fieldset.controls, .context-search fieldset.buttons, .context-search fieldset.fiters, .context-search fieldset.actions { border: 1px solid #CCCCCC; margin: 4px 0; padding: 10px; } .context-search fieldset { margin:0; padding:10px 10px 0 10px; } .context-search fieldset select { width: 256px; } .context-search .extra { margin-top: 8px; } .context-search dd, .context-search dl.zend_form { margin:10px 0; padding:0; border:none; box-shadow:none; width:auto; } .context-search a.reset { display: inline-block; font-size: 0.9em; margin: 8px 2px 0; } /* Right block */ .context-list, .context-article { margin: 22px 22px 22px 11px; color: #007fb3; background:#FFF; } .context-article { } .context-list-results { border: 1px solid #9d9d9d; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; background: #f9f9f9; margin: 15px 0 0; height:506px; } .context-list .context-item { border:1px solid #ccc; background:#fff; margin:4px 8px; float:left; position:relative; padding:5px 5px 5px 26px; width:441px; } .context-list .context-item-summary { padding: 2px 18px 2px 0; } .context-list input.default-button, .context-article input.default-button { margin:0; } .context-list-results .save-button-bar { margin:8px 8px 4px 0; } .context-list h3, .context-search h3 { color:#444444; width:50%; margin: 0 6px; padding:2px 0; font-size:1.5em; } .context-article-preview { margin:30px 0 0; padding: 10px; } .context-article-preview h3 { color:#007fb3; font-size: 1.8em; width:100%; font-family:Georgia, "Times New Roman", Times, serif; padding:0; margin:0; } .context-article-preview p { font-size:12px; color:#444; line-height:1.4em; } /* pagination */ .context-paginate.ui-buttonset { height: auto; overflow: hidden; } .context_info { color: #696969; font-size: 11px; font-weight: normal; padding: 6px 0; margin:3px 0 0; } .context-block .ui-state-default:hover { color:#FFFFFF; background: #007FB3; background: -moz-linear-gradient(center top , #2390BD 0pt, #007FB3 100%) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #2390BD), color-stop(100%, #007FB3)); border: 1px solid #007FB3; } .content .aside { float: left; width: 180px; margin: 0 0 8px 0; } .aside ul.filters { margin: 0; padding: 0; } .aside ul.filters li { margin: 0 0 3px; padding: 5px 8px; font-size: 1.3em; line-height: 1em; background-color: #fff; } .aside ul.filters li.vspace { background-color: transparent; } .aside ul.filters li a.active { font-weight: bold; } .aside .actions { margin-top: 26px; } .aside .actions .navigation li { border-color: #f5f5f5; } .canvas { min-width: 600px; margin: 0 0 8px 188px; } .canvas ul.users { float: left; width: 100%; margin: 0 0 8px; padding: 0; } .canvas ul.users li { margin: 0 0 3px; padding: 5px 8px; font-size: 1.3em; line-height: 1em; background-color: #fff; } .canvas ul.users li a.edit { display: inline-block; width: 30%; min-width: 200px; } .canvas ul.users li a.mailto { display: inline-block; width: 30%; min-width: 250px; color: #333; } .canvas ul.users .status { display: inline-block; width: 8%; min-width: 100px; } .canvas ul.users .inline-actions { float: right; color: #666 } .canvas ul.users .created { color: #666; } .canvas .paginationControl { float: right; clear: right; margin: 0; font-size: 1.3em; line-height: 1em; color: #333; } .canvas .paginationControl * { margin: 0 8px 5px 0; padding: 1px 8px; } .canvas .paginationControl .disabled { color: inherit; } .canvas .controls { height: 26px; overflow: hidden; } .canvas .status.s-0 { color: #f57900; } .canvas .status.s-1 { color: #4e9a06; } .canvas .status.s-2 { color: #cc0000; } .canvas > .controls dl { margin: 0; } .canvas > .controls dt { display: none; } .canvas > .controls dd { margin-left: 0; } h1 { position: relative; } .inline-search { position: absolute; left: 210px; } .inline-search input { padding: 3px 5px; border: 1px solid #fff; background-color: #fff; } .renditions { height: 1%; overflow: hidden; margin: 0; padding: 0 4px; background-color: #d0d0d0; } .renditions li { list-style-type: none; float: left; width: 152px; margin: 8px 4px 8px; padding: 4px; background-color: #fff; position: relative; border: 1px solid #b0b0b0; } .renditions li.state-active { color: #fff; background-color: #000; } dl.rendition { margin: 0; padding: 0; } dl.rendition dt { margin: 0; padding: 0; } dl.rendition dd { margin: 3px 0 0; padding: 0; } dl.rendition .preview { height: 152px; } dl.rendition .preview { border: 1px solid #4e4e4e; overflow: hidden; } dl.rendition dt { height: 152px; } li.state-active dl.rendition .preview { border-color: #fff; } li.state-active dl.rendition dd.name { color: #fff; } .renditions .reset { position: absolute; right: 4px; top: 4px; padding: 3px; color: #fff; background-color: #4e4e4e; opacity: 0.8; } .renditions .reset:hover { opacity: 1; } .renditions h3 { font-size: 1.1em; } .thumbnails { clear: both; margin: 0 0 8px; padding: 0 4px; } .thumbnails li { list-style-type: none; display: inline-block; width: 152px; margin: 8px 4px 8px; padding: 4px; background-color: #fff; border: 1px solid #9d9d9d; } .thumbnails li.small { width: 77px; } .thumbnails img { border: 1px solid #ccc; } .thumbnails figure { margin: 0; padding: 0; } .thumbnails figure div { min-height: 153px; } .thumbnails figure div.small { min-height: 78px; } .thumbnails figure img { display: block; } .thumbnails figcaption { padding: 5px 0 0; } .thumbnails figure label { font-size: 1em; } .thumbnails input { float: right; } #next h2 { margin: 13px 0 0; padding: 0 13px; font-size: 1.5em; } #next h2 small { font-size: 1em; } #next .editarea h2 { margin-bottom: 5px; padding: 0 5px; } #next #editor { display: inline-block; margin: 5px 0; padding: 5px; background-color: #000; } #next .editarea .video-preview { display: inline-block; margin: 5px 0; padding: 5px; background-color: #000; } .slideshow { clear: both; height: 1%; min-height: 150px; overflow: hidden; margin: 8px 0; padding: 4px; background-color: #d0d0d0; } .slideshow li { float: left; margin: 4px 4px; padding: 13px 4px 4px; width: 152px; background-color: #fff; border: 1px solid #9c9c9c; position: relative; } .slideshow .placeholder { width: 150px; height: 166px; border: 2px dashed #b0b0b0; background-color: transparent; } .slideshow .rendition-preview, .slideshow .video-preview { border: 1px solid #9d9d9d; } .slideshow .video-preview { height: 150px; overflow: hidden; } .slideshow a figcaption { margin: 3px 0 0; font-size: 1.1em; color: #000; } .slideshow figure { margin: 0; } .slideshow figure > div { height: 152px; overflow: hidden; } .slideshow .remove { position: absolute; top: 0; right: 0; padding: 3px; color: #fff; background-color: #000; opacity: 0.8; } .slideshow .remove:hover { opacity: 1; } #next.iframe { background-color: #f5f5f5; } #next.iframe.dark { background-color: #d0d0d0; } #next.iframe .content { margin: 0; } #next.iframe h1 { height: auto; min-height: 1%; line-height: 1em; margin: 0; padding: 5px 8px 13px; background: #fff none; font-size: 2em; box-shadow: none; border: none; } #next .inline { float: none; width: auto; margin: 8px 0; padding: 0 8px; } #next input[type="text"] { min-width: 21em; margin: 3px 5px 5px 0; padding: 3px; border: 1px solid #ccc; } #next .editarea input[type="text"] { width: 98%; } #next input[type="text"].short { min-width: 50px; } #next input[type="text"].error { color: #a40000; border-color: #a40000; } #next .editarea { padding-bottom: 5px; text-align: center; position: relative; background-color: #f5f5f5; } #next .editarea > div { display: inline-block; text-align: left; min-width: 500px; } .editarea button { margin: 3px 0; } .editarea .next, .editarea .prev { position: absolute; width: 52px; height: 67px; overflow: hidden; top: 34%; } .editarea .next span, .editarea .prev span { display: block; position: absolute; top: 0; left: 0; width: 52px; height: 67px; background: transparent none no-repeat 0 0; } .editarea .prev { left: 0; } .editarea .next { right: 0; } .editarea .prev span { background-image: url('images/arrow_prev.png'); } .editarea .next span { background-image: url('images/arrow_next.png'); } .slideshow.editor { margin: 0; } .slideshow.editor .remove { display: none; } .editarea .done { position: absolute; top: 8px; right: 8px; } #next button, .editarea .done { display: inline-block; margin: 0; padding: 3px 5px; font-size: 1.3em; color: #444; background-color: #f9f9f9; border: 1px solid #9d9d9d; cursor: pointer; } #editor input[type="radio"] { display: none; } .slideshows { clear: both; margin: 0; padding: 0; } .slideshows li { margin: 3px 0 0; font-size: 1.3em; } .renditions.editor .reset { display: none; } .renditions .active, .slideshow .active { background-color: #d9eaf9; } .archive.images { min-width: 34em; } .archive.images figcaption { height: 2.2em; overflow: hidden; } #image-archive { display: inline-block; position: relative; } #slideshows .slideshows { margin: 8px; } #slideshows .slideshows > li { height: 1%; overflow: hidden; margin: 8px 0 0; padding: 5px; background-color: #fff; } #slideshows .slideshows a { float: left; display: inline-block; padding: 3px 5px; color: #fff; background-color: #000; font-size: 0.85em; } #slideshows .slideshows a small { font-size: 0.8em; } #slideshows .slideshow-preview { float: left; clear: left; padding: 0 0 5px 5px; background-color: #2e3436; } #slideshows .slideshow-preview .rendition-preview { float: left; margin: 5px 5px 0 0; } a.create-slideshow { display: inline-block; margin: 13px 13px 5px; padding: 3px 5px; color: #fff; background-color: #4e9a06; } #next .ui-tabs { border: none; font-size: 1em; } #next .ui-tabs-nav { font-size: 1.1em; } #next #image-search { margin: 8px 8px 0; } #next #image-archive .info { margin: 8px; font-size: 1.1em; } dl.slideshow-preview { margin: 0; padding: 0; height: 1%; overflow: hidden; } dl.slideshow-preview dt { float: left; clear: right; padding: 3px 5px; color: #fff; background-color: #000; } dl.slideshow-preview dd { float: left; margin: 0; padding: 5px 5px 5px 0; color: #eeeeec; background-color: #2e3436; } dl.slideshow-preview dd.first { clear: left; padding-left: 5px; } dl.slideshow-preview figure { margin: 0; } dl.slideshow-preview figure > div > * { display: block; border: 1px solid #babdb6; } .ui-selected dl.slideshow-preview { opacity: 0.5; } #attach-slideshow-list { margin: 13px 8px; } #next .buttons { margin: 0 8px 13px; } #media-slideshows .slideshows { margin-top: 34px; font-size: 0.8em; } #media-slideshows .slideshows .detach { float: right; color: #a40000; } #media-slideshows .slideshows li { margin: 8px 0 0; padding: 5px; border: 1px solid #ccc; } #media-slideshows .slideshows a { color: #2e3436; } #media-slideshows .empty { clear: both; margin: 0; padding: 13px 0 0; } #rendition-list { list-style-type: none; margin: 8px 0; padding: 0; max-width: 60em; } #rendition-list > li { margin: 3px 0 0; padding: 5px; background-color: #fff; font-size: 1.3em; } #rendition-list input { border: 1px solid #ccc; padding: 2px 5px; } /* modal popup styles */ #modal-top { background: #fff; margin: 0 auto; } #modal-top .toolbar { min-height: 35px; padding: 6px 20px 6px 0px; background: #fff; box-shadow: none; border: none; } #modal-top h2 { color: #444444; width: 50%; margin: 0 6px; } .users abbr.verified { margin: 0 0 0 5px; padding: 0 3px; color: #fff; background-color: #4e9a06; border: none; } #article-image-edit-thumbnail, #article-image-edit-form { float: left; padding: 13px 0 13px 13px; } .caption-reuse > input { float: left; } #article-image-edit-form .caption-reuse > button { margin-top: 6px; } ================================================ FILE: newscoop/admin-style/fg-menu/fg.menu.css ================================================ /* Styles for jQuery menu widget Author: Maggie Wachs, maggie@filamentgroup.com Date: September 2008 */ /* REQUIRED STYLES - the menus will only render correctly with these rules */ .fg-menu-container { position: absolute; top:0; left:-999px; padding: .4em; overflow: hidden; } .fg-menu-container.fg-menu-flyout { overflow: visible; } .fg-menu, .fg-menu ul { list-style-type:none; padding: 0; margin:0; } .fg-menu { position:relative; } .fg-menu-flyout .fg-menu { position:static; } .fg-menu ul { position:absolute; top:0; } .fg-menu ul ul { top:-1px; } .fg-menu-container.fg-menu-ipod .fg-menu-content, .fg-menu-container.fg-menu-ipod .fg-menu-content ul { background: none !important; } .fg-menu.fg-menu-scroll, .fg-menu ul.fg-menu-scroll { overflow: scroll; overflow-x: hidden; } .fg-menu li { clear:both; float:left; width:100%; margin: 0; padding:0; border: 0; } .fg-menu li li { font-size:1em; } /* inner li font size must be reset so that they don't blow up */ .fg-menu-flyout ul ul { padding: .4em; } .fg-menu-flyout li { position:relative; } .fg-menu-scroll { overflow: scroll; overflow-x: hidden; } .fg-menu-breadcrumb { margin: 0; padding: 0; } .fg-menu-footer { margin-top: .4em; padding: .4em; } .fg-menu-header { margin-bottom: .4em; padding: .4em; } .fg-menu-breadcrumb li { float: left; list-style: none; margin: 0; padding: 0 .2em; font-size: .9em; opacity: .7; } .fg-menu-breadcrumb li.fg-menu-prev-list, .fg-menu-breadcrumb li.fg-menu-current-crumb { clear: left; float: none; opacity: 1; } .fg-menu-breadcrumb li.fg-menu-current-crumb { padding-top: .2em; } .fg-menu-breadcrumb a, .fg-menu-breadcrumb span { float: left; } .fg-menu-footer a:link, .fg-menu-footer a:visited { float:left; width:100%; text-decoration: none; } .fg-menu-footer a:hover, .fg-menu-footer a:active { } .fg-menu-footer a span { float:left; cursor: pointer; } .fg-menu-breadcrumb .fg-menu-prev-list a:link, .fg-menu-breadcrumb .fg-menu-prev-list a:visited, .fg-menu-breadcrumb .fg-menu-prev-list a:hover, .fg-menu-breadcrumb .fg-menu-prev-list a:active { background-image: none; text-decoration:none; } .fg-menu-breadcrumb .fg-menu-prev-list a { float: left; padding-right: .4em; } .fg-menu-breadcrumb .fg-menu-prev-list a .ui-icon { float: left; } .fg-menu-breadcrumb .fg-menu-current-crumb a:link, .fg-menu-breadcrumb .fg-menu-current-crumb a:visited, .fg-menu-breadcrumb .fg-menu-current-crumb a:hover, .fg-menu-breadcrumb .fg-menu-current-crumb a:active { display:block; background-image:none; font-size:1.3em; text-decoration:none; } /* REQUIRED LINK STYLES: links are "display:block" by default; if the menu options are split into selectable node links and 'next' links, the script floats the node links left and floats the 'next' links to the right */ .fg-menu a:link, .fg-menu a:visited, .fg-menu a:hover, .fg-menu a:active { float:left; width:92%; padding:.3em 3%; text-decoration:none; outline: 0 !important; } .fg-menu a { border: 1px dashed transparent; } .fg-menu a.ui-state-default:link, .fg-menu a.ui-state-default:visited, .fg-menu a.ui-state-default:hover, .fg-menu a.ui-state-default:active, .fg-menu a.ui-state-hover:link, .fg-menu a.ui-state-hover:visited, .fg-menu a.ui-state-hover:hover, .fg-menu a.ui-state-hover:active, .fg-menu a.ui-state-active:link, .fg-menu a.ui-state-active:visited, .fg-menu a.ui-state-active:hover, .fg-menu a.ui-state-active:active { border-style: solid; font-weight: normal; } .fg-menu a span { display:block; cursor:pointer; } /* SUGGESTED STYLES - for use with jQuery UI Themeroller CSS */ .fg-menu-indicator span { float:left; } .fg-menu-indicator span.ui-icon { float:right; } .fg-menu-content.ui-widget-content, .fg-menu-content ul.ui-widget-content { border:0; } /* ICONS AND DIVIDERS */ .fg-menu.fg-menu-has-icons a:link, .fg-menu.fg-menu-has-icons a:visited, .fg-menu.fg-menu-has-icons a:hover, .fg-menu.fg-menu-has-icons a:active { padding-left:20px; } .fg-menu .horizontal-divider hr, .fg-menu .horizontal-divider span { padding:0; margin:5px .6em; } .fg-menu .horizontal-divider hr { border:0; height:1px; } .fg-menu .horizontal-divider span { font-size:.9em; text-transform: uppercase; padding-left:.2em; } ================================================ FILE: newscoop/admin-style/fg-menu/fg.menu.js ================================================ /*-------------------------------------------------------------------- Scripts for creating and manipulating custom menus based on standard
      markup Version: 3.0, 03.31.2009 By: Maggie Costello Wachs (maggie@filamentgroup.com) and Scott Jehl (scott@filamentgroup.com) http://www.filamentgroup.com * reference articles: http://www.filamentgroup.com/lab/jquery_ipod_style_drilldown_menu/ Copyright (c) 2009 Filament Group Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses. --------------------------------------------------------------------*/ var allUIMenus = []; $.fn.menu = function(options){ var caller = this; var options = options; var m = new Menu(caller, options); allUIMenus.push(m); $(this) .mousedown(function(){ if (!m.menuOpen) { m.showLoading(); }; }) .click(function(){ if (m.menuOpen == false) { m.showMenu(); } else { m.kill(); }; return false; }); }; function Menu(caller, options){ var menu = this; var caller = $(caller); var container = $('
      '+options.content+'
      '); this.menuOpen = false; this.menuExists = false; var options = jQuery.extend({ content: null, width: 180, // width of menu container, must be set or passed in to calculate widths of child menus maxHeight: 180, // max height of menu (if a drilldown: height does not include breadcrumb) positionOpts: { posX: 'left', posY: 'bottom', offsetX: 0, offsetY: 0, directionH: 'right', directionV: 'down', detectH: true, // do horizontal collision detection detectV: true, // do vertical collision detection linkToFront: false }, showSpeed: 200, // show/hide speed in milliseconds callerOnState: 'ui-state-active', // class to change the appearance of the link/button when the menu is showing loadingState: 'ui-state-loading', // class added to the link/button while the menu is created linkHover: 'ui-state-hover', // class for menu option hover state linkHoverSecondary: 'li-hover', // alternate class, may be used for multi-level menus // ----- multi-level menu defaults ----- crossSpeed: 200, // cross-fade speed for multi-level menus crumbDefaultText: 'Choose an option:', backLink: true, // in the ipod-style menu: instead of breadcrumbs, show only a 'back' link backLinkText: 'Back', flyOut: false, // multi-level menus are ipod-style by default; this parameter overrides to make a flyout instead flyOutOnState: 'ui-state-default', nextMenuLink: 'ui-icon-triangle-1-e', // class to style the link (specifically, a span within the link) used in the multi-level menu to show the next level topLinkText: 'All', nextCrumbLink: 'ui-icon-carat-1-e' }, options); var killAllMenus = function(){ $.each(allUIMenus, function(i){ if (allUIMenus[i].menuOpen) { allUIMenus[i].kill(); }; }); }; this.kill = function(){ caller .removeClass(options.loadingState) .removeClass('fg-menu-open') .removeClass(options.callerOnState); container.find('li').removeClass(options.linkHoverSecondary).find('a').removeClass(options.linkHover); if (options.flyOutOnState) { container.find('li a').removeClass(options.flyOutOnState); }; if (options.callerOnState) { caller.removeClass(options.callerOnState); }; if (container.is('.fg-menu-ipod')) { menu.resetDrilldownMenu(); }; if (container.is('.fg-menu-flyout')) { menu.resetFlyoutMenu(); }; container.parent().hide(); menu.menuOpen = false; $(document).unbind('click', killAllMenus); $(document).unbind('keydown'); }; this.showLoading = function(){ caller.addClass(options.loadingState); }; this.showMenu = function(){ killAllMenus(); if (!menu.menuExists) { menu.create() }; caller .addClass('fg-menu-open') .addClass(options.callerOnState); container.parent().show().click(function(){ menu.kill(); return false; }); container.hide().slideDown(options.showSpeed).find('.fg-menu:eq(0)'); menu.menuOpen = true; caller.removeClass(options.loadingState); $(document).click(killAllMenus); // assign key events $(document).keydown(function(event){ var e; if (event.which !="") { e = event.which; } else if (event.charCode != "") { e = event.charCode; } else if (event.keyCode != "") { e = event.keyCode; } var menuType = ($(event.target).parents('div').is('.fg-menu-flyout')) ? 'flyout' : 'ipod' ; switch(e) { case 37: // left arrow if (menuType == 'flyout') { $(event.target).trigger('mouseout'); if ($('.'+options.flyOutOnState).size() > 0) { $('.'+options.flyOutOnState).trigger('mouseover'); }; }; if (menuType == 'ipod') { $(event.target).trigger('mouseout'); if ($('.fg-menu-footer').find('a').size() > 0) { $('.fg-menu-footer').find('a').trigger('click'); }; if ($('.fg-menu-header').find('a').size() > 0) { $('.fg-menu-current-crumb').prev().find('a').trigger('click'); }; if ($('.fg-menu-current').prev().is('.fg-menu-indicator')) { $('.fg-menu-current').prev().trigger('mouseover'); }; }; return false; break; case 38: // up arrow if ($(event.target).is('.' + options.linkHover)) { var prevLink = $(event.target).parent().prev().find('a:eq(0)'); if (prevLink.size() > 0) { $(event.target).trigger('mouseout'); prevLink.trigger('mouseover'); }; } else { container.find('a:eq(0)').trigger('mouseover'); } return false; break; case 39: // right arrow if ($(event.target).is('.fg-menu-indicator')) { if (menuType == 'flyout') { $(event.target).next().find('a:eq(0)').trigger('mouseover'); } else if (menuType == 'ipod') { $(event.target).trigger('click'); setTimeout(function(){ $(event.target).next().find('a:eq(0)').trigger('mouseover'); }, options.crossSpeed); }; }; return false; break; case 40: // down arrow if ($(event.target).is('.' + options.linkHover)) { var nextLink = $(event.target).parent().next().find('a:eq(0)'); if (nextLink.size() > 0) { $(event.target).trigger('mouseout'); nextLink.trigger('mouseover'); }; } else { container.find('a:eq(0)').trigger('mouseover'); } return false; break; case 27: // escape killAllMenus(); break; case 13: // enter if ($(event.target).is('.fg-menu-indicator') && menuType == 'ipod') { $(event.target).trigger('click'); setTimeout(function(){ $(event.target).next().find('a:eq(0)').trigger('mouseover'); }, options.crossSpeed); }; break; }; }); }; this.create = function(){ container.css({ width: options.width }).appendTo('body').find('ul:first').not('.fg-menu-breadcrumb').addClass('fg-menu'); container.find('ul, li a').addClass('ui-corner-all'); // aria roles & attributes container.find('ul').attr('role', 'menu').eq(0).attr('aria-activedescendant','active-menuitem').attr('aria-labelledby', caller.attr('id')); container.find('li').attr('role', 'menuitem'); container.find('li:has(ul)').attr('aria-haspopup', 'true').find('ul').attr('aria-expanded', 'false'); container.find('a').attr('tabindex', '-1'); // when there are multiple levels of hierarchy, create flyout or drilldown menu if (container.find('ul').size() > 1) { if (options.flyOut) { menu.flyout(container, options); } else { menu.drilldown(container, options); } } else { container.find('a').click(function(){ menu.chooseItem(this); return false; }); }; if (options.linkHover) { var allLinks = container.find('.fg-menu li a'); allLinks.hover( function(){ var menuitem = $(this); $('.'+options.linkHover).removeClass(options.linkHover).blur().parent().removeAttr('id'); $(this).addClass(options.linkHover).focus().parent().attr('id','active-menuitem'); }, function(){ $(this).removeClass(options.linkHover).blur().parent().removeAttr('id'); } ); }; if (options.linkHoverSecondary) { container.find('.fg-menu li').hover( function(){ $(this).siblings('li').removeClass(options.linkHoverSecondary); if (options.flyOutOnState) { $(this).siblings('li').find('a').removeClass(options.flyOutOnState); } $(this).addClass(options.linkHoverSecondary); }, function(){ $(this).removeClass(options.linkHoverSecondary); } ); }; menu.setPosition(container, caller, options); menu.menuExists = true; }; this.chooseItem = function(item){ menu.kill(); // edit this for your own custom function/callback: $('#menuSelection').text($(item).text()); location.href = $(item).attr('href'); }; }; Menu.prototype.flyout = function(container, options) { var menu = this; this.resetFlyoutMenu = function(){ var allLists = container.find('ul ul'); allLists.removeClass('ui-widget-content').hide(); }; container.addClass('fg-menu-flyout').find('li:has(ul)').each(function(){ var linkWidth = container.width(); var showTimer, hideTimer; var allSubLists = $(this).find('ul'); allSubLists.css({ left: linkWidth, width: linkWidth }).hide(); $(this).find('a:eq(0)').addClass('fg-menu-indicator').html('' + $(this).find('a:eq(0)').text() + '').hover( function(){ clearTimeout(hideTimer); var subList = $(this).next(); if (!fitVertical(subList, $(this).offset().top)) { subList.css({ top: 'auto', bottom: 0 }); }; if (!fitHorizontal(subList, $(this).offset().left + 100)) { subList.css({ left: 'auto', right: linkWidth, 'z-index': 999 }); }; showTimer = setTimeout(function(){ subList.addClass('ui-widget-content').show(options.showSpeed).attr('aria-expanded', 'true'); }, 300); }, function(){ clearTimeout(showTimer); var subList = $(this).next(); hideTimer = setTimeout(function(){ subList.removeClass('ui-widget-content').hide(options.showSpeed).attr('aria-expanded', 'false'); }, 400); } ); $(this).find('ul a').hover( function(){ clearTimeout(hideTimer); if ($(this).parents('ul').prev().is('a.fg-menu-indicator')) { $(this).parents('ul').prev().addClass(options.flyOutOnState); } }, function(){ hideTimer = setTimeout(function(){ allSubLists.hide(options.showSpeed); container.find(options.flyOutOnState).removeClass(options.flyOutOnState); }, 500); } ); }); container.find('a').click(function(){ menu.chooseItem(this); return false; }); }; Menu.prototype.drilldown = function(container, options) { var menu = this; var topList = container.find('.fg-menu'); var breadcrumb = $('
        '); var crumbDefaultHeader = $('
      • '+options.crumbDefaultText+'
      • '); var firstCrumbText = (options.backLink) ? options.backLinkText : options.topLinkText; var firstCrumbClass = (options.backLink) ? 'fg-menu-prev-list' : 'fg-menu-all-lists'; var firstCrumbLinkClass = (options.backLink) ? 'ui-state-default ui-corner-all' : ''; var firstCrumbIcon = (options.backLink) ? '' : ''; var firstCrumb = $('
      • '+firstCrumbIcon+firstCrumbText+'
      • '); container.addClass('fg-menu-ipod'); if (options.backLink) { breadcrumb.addClass('fg-menu-footer').appendTo(container).hide(); } else { breadcrumb.addClass('fg-menu-header').prependTo(container); }; breadcrumb.append(crumbDefaultHeader); var checkMenuHeight = function(el){ if (el.height() > options.maxHeight) { el.addClass('fg-menu-scroll') }; el.css({ height: options.maxHeight }); }; var resetChildMenu = function(el){ el.removeClass('fg-menu-scroll').removeClass('fg-menu-current').height('auto'); }; this.resetDrilldownMenu = function(){ $('.fg-menu-current').removeClass('fg-menu-current'); topList.animate({ left: 0 }, options.crossSpeed, function(){ $(this).find('ul').each(function(){ $(this).hide(); resetChildMenu($(this)); }); topList.addClass('fg-menu-current'); }); $('.fg-menu-all-lists').find('span').remove(); breadcrumb.empty().append(crumbDefaultHeader); $('.fg-menu-footer').empty().hide(); checkMenuHeight(topList); }; topList .addClass('fg-menu-content fg-menu-current ui-widget-content ui-helper-clearfix') .css({ width: container.width() }) .find('ul') .css({ width: container.width(), left: container.width() }) .addClass('ui-widget-content') .hide(); checkMenuHeight(topList); topList.find('a').each(function(){ // if the link opens a child menu: if ($(this).next().is('ul')) { $(this) .addClass('fg-menu-indicator') .each(function(){ $(this).html('' + $(this).text() + ''); }) .click(function(){ // ----- show the next menu var nextList = $(this).next(); var parentUl = $(this).parents('ul:eq(0)'); var parentLeft = (parentUl.is('.fg-menu-content')) ? 0 : parseFloat(topList.css('left')); var nextLeftVal = Math.round(parentLeft - parseFloat(container.width())); var footer = $('.fg-menu-footer'); // show next menu resetChildMenu(parentUl); checkMenuHeight(nextList); topList.animate({ left: nextLeftVal }, options.crossSpeed); nextList.show().addClass('fg-menu-current').attr('aria-expanded', 'true'); var setPrevMenu = function(backlink){ var b = backlink; var c = $('.fg-menu-current'); var prevList = c.parents('ul:eq(0)'); c.hide().attr('aria-expanded', 'false'); resetChildMenu(c); checkMenuHeight(prevList); prevList.addClass('fg-menu-current').attr('aria-expanded', 'true'); if (prevList.hasClass('fg-menu-content')) { b.remove(); footer.hide(); }; }; // initialize "back" link if (options.backLink) { if (footer.find('a').size() == 0) { footer.show(); $(' Back') .appendTo(footer) .click(function(){ // ----- show the previous menu var b = $(this); var prevLeftVal = parseFloat(topList.css('left')) + container.width(); topList.animate({ left: prevLeftVal }, options.crossSpeed, function(){ setPrevMenu(b); }); return false; }); } } // or initialize top breadcrumb else { if (breadcrumb.find('li').size() == 1){ breadcrumb.empty().append(firstCrumb); firstCrumb.find('a').click(function(){ menu.resetDrilldownMenu(); return false; }); } $('.fg-menu-current-crumb').removeClass('fg-menu-current-crumb'); var crumbText = $(this).find('span:eq(0)').text(); var newCrumb = $('
      • '+crumbText+'
      • '); newCrumb .appendTo(breadcrumb) .find('a').click(function(){ if ($(this).parent().is('.fg-menu-current-crumb')){ menu.chooseItem(this); } else { var newLeftVal = - ($('.fg-menu-current').parents('ul').size() - 1) * 180; topList.animate({ left: newLeftVal }, options.crossSpeed, function(){ setPrevMenu(); }); // make this the current crumb, delete all breadcrumbs after this one, and navigate to the relevant menu $(this).parent().addClass('fg-menu-current-crumb').find('span').remove(); $(this).parent().nextAll().remove(); }; return false; }); newCrumb.prev().append(' '); }; return false; }); } // if the link is a leaf node (doesn't open a child menu) else { $(this).click(function(){ menu.chooseItem(this); return false; }); }; }); }; /* Menu.prototype.setPosition parameters (defaults noted with *): referrer = the link (or other element) used to show the overlaid object settings = can override the defaults: - posX/Y: where the top left corner of the object should be positioned in relation to its referrer. X: left*, center, right Y: top, center, bottom* - offsetX/Y: the number of pixels to be offset from the x or y position. Can be a positive or negative number. - directionH/V: where the entire menu should appear in relation to its referrer. Horizontal: left*, right Vertical: up, down* - detectH/V: detect the viewport horizontally / vertically - linkToFront: copy the menu link and place it on top of the menu (visual effect to make it look like it overlaps the object) */ Menu.prototype.setPosition = function(widget, caller, options) { var el = widget; var referrer = caller; var dims = { refX: referrer.offset().left, refY: referrer.offset().top, refW: referrer.getTotalWidth(), refH: referrer.getTotalHeight() }; var options = options; var xVal, yVal; var helper = $('
        '); helper.css({ position: 'absolute', left: dims.refX, top: dims.refY, width: dims.refW, height: dims.refH }); el.wrap(helper); // get X pos switch(options.positionOpts.posX) { case 'left': xVal = 0; break; case 'center': xVal = dims.refW / 2; break; case 'right': xVal = dims.refW; break; }; // get Y pos switch(options.positionOpts.posY) { case 'top': yVal = 0; break; case 'center': yVal = dims.refH / 2; break; case 'bottom': yVal = dims.refH; break; }; // add the offsets (zero by default) xVal += options.positionOpts.offsetX; yVal += options.positionOpts.offsetY; // position the object vertically if (options.positionOpts.directionV == 'up') { el.css({ top: 'auto', bottom: yVal }); if (options.positionOpts.detectV && !fitVertical(el)) { el.css({ bottom: 'auto', top: yVal }); } } else { el.css({ bottom: 'auto', top: yVal }); if (options.positionOpts.detectV && !fitVertical(el)) { el.css({ top: 'auto', bottom: yVal }); } }; // and horizontally if (options.positionOpts.directionH == 'left') { el.css({ left: 'auto', right: xVal }); if (options.positionOpts.detectH && !fitHorizontal(el)) { el.css({ right: 'auto', left: xVal }); } } else { el.css({ right: 'auto', left: xVal }); if (options.positionOpts.detectH && !fitHorizontal(el)) { el.css({ left: 'auto', right: xVal }); } }; // if specified, clone the referring element and position it so that it appears on top of the menu if (options.positionOpts.linkToFront) { referrer.clone().addClass('linkClone').css({ position: 'absolute', top: 0, right: 'auto', bottom: 'auto', left: 0, width: referrer.width(), height: referrer.height() }).insertAfter(el); }; }; /* Utilities to sort and find viewport dimensions */ function sortBigToSmall(a, b) { return b - a; }; jQuery.fn.getTotalWidth = function(){ return $(this).width() + parseInt($(this).css('paddingRight')) + parseInt($(this).css('paddingLeft')) + parseInt($(this).css('borderRightWidth')) + parseInt($(this).css('borderLeftWidth')); }; jQuery.fn.getTotalHeight = function(){ return $(this).height() + parseInt($(this).css('paddingTop')) + parseInt($(this).css('paddingBottom')) + parseInt($(this).css('borderTopWidth')) + parseInt($(this).css('borderBottomWidth')); }; function getScrollTop(){ return self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; }; function getScrollLeft(){ return self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft; }; function getWindowHeight(){ var de = document.documentElement; return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight; }; function getWindowWidth(){ var de = document.documentElement; return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth; }; /* Utilities to test whether an element will fit in the viewport Parameters: el = element to position, required leftOffset / topOffset = optional parameter if the offset cannot be calculated (i.e., if the object is in the DOM but is set to display: 'none') */ function fitHorizontal(el, leftOffset){ var leftVal = parseInt(leftOffset) || $(el).offset().left; return (leftVal + $(el).width() <= getWindowWidth() + getScrollLeft() && leftVal - getScrollLeft() >= 0); }; function fitVertical(el, topOffset){ var topVal = parseInt(topOffset) || $(el).offset().top; return (topVal + $(el).height() <= getWindowHeight() + getScrollTop() && topVal - getScrollTop() >= 0); }; /*-------------------------------------------------------------------- * javascript method: "pxToEm" * by: Scott Jehl (scott@filamentgroup.com) Maggie Wachs (maggie@filamentgroup.com) http://www.filamentgroup.com * * Copyright (c) 2008 Filament Group * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses. * * Description: Extends the native Number and String objects with pxToEm method. pxToEm converts a pixel value to ems depending on inherited font size. * Article: http://www.filamentgroup.com/lab/retaining_scalable_interfaces_with_pixel_to_em_conversion/ * Demo: http://www.filamentgroup.com/examples/pxToEm/ * * Options: scope: string or jQuery selector for font-size scoping reverse: Boolean, true reverses the conversion to em-px * Dependencies: jQuery library * Usage Example: myPixelValue.pxToEm(); or myPixelValue.pxToEm({'scope':'#navigation', reverse: true}); * * Version: 2.0, 08.01.2008 * Changelog: * 08.02.2007 initial Version 1.0 * 08.01.2008 - fixed font-size calculation for IE --------------------------------------------------------------------*/ Number.prototype.pxToEm = String.prototype.pxToEm = function(settings){ //set defaults settings = jQuery.extend({ scope: 'body', reverse: false }, settings); var pxVal = (this == '') ? 0 : parseFloat(this); var scopeVal; var getWindowWidth = function(){ var de = document.documentElement; return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth; }; /* When a percentage-based font-size is set on the body, IE returns that percent of the window width as the font-size. For example, if the body font-size is 62.5% and the window width is 1000px, IE will return 625px as the font-size. When this happens, we calculate the correct body font-size (%) and multiply it by 16 (the standard browser font size) to get an accurate em value. */ if (settings.scope == 'body' && $.browser.msie && (parseFloat($('body').css('font-size')) / getWindowWidth()).toFixed(1) > 0.0) { var calcFontSize = function(){ return (parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(3) * 16; }; scopeVal = calcFontSize(); } else { scopeVal = parseFloat(jQuery(settings.scope).css("font-size")); }; var result = (settings.reverse == true) ? (pxVal * scopeVal).toFixed(2) + 'px' : (pxVal / scopeVal).toFixed(2) + 'em'; return result; }; ================================================ FILE: newscoop/admin-style/fg-menu/menuContent.html ================================================ ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.accordion.css ================================================ /* Accordion ----------------------------------*/ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion li {display: inline;} .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } .ui-accordion .ui-accordion-content-active { display: block; } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.all.css ================================================ @import "ui.theme.css"; ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.base.css ================================================ @import url("ui.core.css"); @import url("ui.accordion.css"); @import url("ui.datepicker.css"); @import url("ui.dialog.css"); @import url("ui.progressbar.css"); @import url("ui.resizable.css"); @import url("ui.slider.css"); @import url("ui.tabs.css"); ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.core.css ================================================ /* * jQuery UI CSS Framework * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.datepicker.css ================================================ /* Datepicker ----------------------------------*/ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:left; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.dialog.css ================================================ /* Dialog ----------------------------------*/ .ui-dialog { position: relative; padding: .2em; width: 300px; } .ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.progressbar.css ================================================ /* Progressbar ----------------------------------*/ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.resizable.css ================================================ /* Resizable ----------------------------------*/ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.slider.css ================================================ /* Slider ----------------------------------*/ .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: 1%; display: block; border: 0; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.tabs.css ================================================ /* Tabs ----------------------------------*/ .ui-tabs {padding: .2em;} .ui-tabs .ui-tabs-nav { padding: .2em .2em 0 .2em; position: relative; } .ui-tabs .ui-tabs-nav li { float: left; border-bottom: 0 !important; margin: 0 .2em -1px 0; padding: 0; list-style: none; } .ui-tabs .ui-tabs-nav li a { display:block; text-decoration: none; padding: .5em 1em; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: .1em; border-bottom: 0; } .ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border: 0; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } ================================================ FILE: newscoop/admin-style/fg-menu/theme/ui.theme.css ================================================ /* Component containers ----------------------------------*/ #main-menu .ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } #main-menu .ui-widget input, #main-menu .ui-widget select, #main-menu .ui-widget textarea, #main-menu .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } #main-menu .ui-widget-content { border: 1px solid #161616; background: #202020; color: #fff; } #main-menu .ui-widget-content a { color: #fff; } #main-menu .ui-widget-header { border: 1px solid #59584f; background: #3b3b35 url(images/ui-bg_inset-soft_22_3b3b35_1x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } #main-menu .ui-widget-header a { color: #ffffff; } /* Interaction states ----------------------------------*/ #main-menu .ui-state-default, #main-menu .ui-widget-content .ui-state-default { border: 1px solid #3b3b3b; background: #3b3b3b; font-weight: normal; color: #ffffff; outline: none; } #main-menu .ui-state-default a { color: #ffffff; text-decoration: none; outline: none; } #main-menu .ui-state-hover, #main-menu .ui-widget-content .ui-state-hover, #main-menu .ui-state-focus, #main-menu .ui-widget-content .ui-state-focus { border: 1px solid #161616; background: #252525; font-weight: normal; color: #ffffff; outline: none; } #main-menu .ui-state-hover a { color: #ffffff; text-decoration: none; outline: none; } #main-menu .ui-state-active, #main-menu .ui-widget-content .ui-state-active { border: 1px solid #161616; background: #161616; font-weight: normal; color: #fff; outline: none; } #main-menu .ui-state-active a { color: #403D38; outline: none; text-decoration: none; } /* Interaction Cues ----------------------------------*/ #main-menu .ui-state-highlight, #main-menu .ui-widget-content .ui-state-highlight { border: 1px solid #e8e1b5; background: #fcf0ba url(images/ui-bg_glass_55_fcf0ba_1x400.png) 50% 50% repeat-x; color: #363636; } #main-menu .ui-state-highlight a, #main-menu .ui-widget-content .ui-state-highlight a { color: #363636; } #main-menu .ui-state-error, #main-menu .ui-widget-content .ui-state-error { border: 1px solid #e3a345; background: #ffedad url(images/ui-bg_highlight-soft_95_ffedad_1x100.png) 50% top repeat-x; color: #cd5c0a; } #main-menu .ui-state-error a, #main-menu .ui-widget-content .ui-state-error a { color: #cd5c0a; } #main-menu .ui-state-error-text, #main-menu .ui-widget-content .ui-state-error-text { color: #cd5c0a; } #main-menu .ui-state-disabled, #main-menu .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } #main-menu .ui-priority-primary, #main-menu .ui-widget-content .ui-priority-primary { font-weight: bold; } #main-menu .ui-priority-secondary, #main-menu .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } /* Icons ----------------------------------*/ /* states and images */ #main-menu .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_409fc6_256x240.png); } #main-menu .ui-widget-content .ui-icon { background-image: url(images/ui-icons_808080_256x240.png); } #main-menu .ui-widget-header .ui-icon { background-image: url(images/ui-icons_e7e6e4_256x240.png); } #main-menu .ui-state-default .ui-icon { background-image: url(images/ui-icons_409fc6_256x240.png); } #main-menu .ui-state-hover .ui-icon, #main-menu .ui-state-focus .ui-icon { background-image: url(images/ui-icons_409fc6_256x240.png); } #main-menu .ui-state-active .ui-icon { background-image: url(images/ui-icons_409fc6_256x240.png); } #main-menu .ui-state-highlight .ui-icon { background-image: url(images/ui-icons_8DC262_256x240.png); } #main-menu .ui-state-error .ui-icon, #main-menu .ui-state-error-text .ui-icon { background-image: url(images/ui-icons_cd0a0a_256x240.png); } /* positioning */ #main-menu .ui-icon-carat-1-n { background-position: 0 0; } #main-menu .ui-icon-carat-1-ne { background-position: -16px 0; } #main-menu .ui-icon-carat-1-e { background-position: -32px 0; } #main-menu .ui-icon-carat-1-se { background-position: -48px 0; } #main-menu .ui-icon-carat-1-s { background-position: -64px 0; } #main-menu .ui-icon-carat-1-sw { background-position: -80px 0; } #main-menu .ui-icon-carat-1-w { background-position: -96px 0; } #main-menu .ui-icon-carat-1-nw { background-position: -112px 0; } #main-menu .ui-icon-carat-2-n-s { background-position: -128px 0; } #main-menu .ui-icon-carat-2-e-w { background-position: -144px 0; } #main-menu .ui-icon-triangle-1-n { background-position: 0 -16px; } #main-menu .ui-icon-triangle-1-ne { background-position: -16px -16px; } #main-menu .ui-icon-triangle-1-e { background-position: -32px -16px; } #main-menu .ui-icon-triangle-1-se { background-position: -48px -16px; } #main-menu .ui-icon-triangle-1-s { background-position: -64px -16px; } #main-menu .ui-icon-triangle-1-sw { background-position: -80px -16px; } #main-menu .ui-icon-triangle-1-w { background-position: -96px -16px; } #main-menu .ui-icon-triangle-1-nw { background-position: -112px -16px; } #main-menu .ui-icon-triangle-2-n-s { background-position: -128px -16px; } #main-menu .ui-icon-triangle-2-e-w { background-position: -144px -16px; } #main-menu .ui-icon-arrow-1-n { background-position: 0 -32px; } #main-menu .ui-icon-arrow-1-ne { background-position: -16px -32px; } #main-menu .ui-icon-arrow-1-e { background-position: -32px -32px; } #main-menu .ui-icon-arrow-1-se { background-position: -48px -32px; } #main-menu .ui-icon-arrow-1-s { background-position: -64px -32px; } #main-menu .ui-icon-arrow-1-sw { background-position: -80px -32px; } #main-menu .ui-icon-arrow-1-w { background-position: -96px -32px; } #main-menu .ui-icon-arrow-1-nw { background-position: -112px -32px; } #main-menu .ui-icon-arrow-2-n-s { background-position: -128px -32px; } #main-menu .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } #main-menu .ui-icon-arrow-2-e-w { background-position: -160px -32px; } #main-menu .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } #main-menu .ui-icon-arrowstop-1-n { background-position: -192px -32px; } #main-menu .ui-icon-arrowstop-1-e { background-position: -208px -32px; } #main-menu .ui-icon-arrowstop-1-s { background-position: -224px -32px; } #main-menu .ui-icon-arrowstop-1-w { background-position: -240px -32px; } #main-menu .ui-icon-arrowthick-1-n { background-position: 0 -48px; } #main-menu .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } #main-menu .ui-icon-arrowthick-1-e { background-position: -32px -48px; } #main-menu .ui-icon-arrowthick-1-se { background-position: -48px -48px; } #main-menu .ui-icon-arrowthick-1-s { background-position: -64px -48px; } #main-menu .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } #main-menu .ui-icon-arrowthick-1-w { background-position: -96px -48px; } #main-menu .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } #main-menu .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } #main-menu .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } #main-menu .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } #main-menu .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } #main-menu .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } #main-menu .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } #main-menu .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } #main-menu .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } #main-menu .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } #main-menu .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } #main-menu .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } #main-menu .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } #main-menu .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } #main-menu .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } #main-menu .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } #main-menu .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } #main-menu .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } #main-menu .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } #main-menu .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } #main-menu .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } #main-menu .ui-icon-arrow-4 { background-position: 0 -80px; } #main-menu .ui-icon-arrow-4-diag { background-position: -16px -80px; } #main-menu .ui-icon-extlink { background-position: -32px -80px; } #main-menu .ui-icon-newwin { background-position: -48px -80px; } #main-menu .ui-icon-refresh { background-position: -64px -80px; } #main-menu .ui-icon-shuffle { background-position: -80px -80px; } #main-menu .ui-icon-transfer-e-w { background-position: -96px -80px; } #main-menu .ui-icon-transferthick-e-w { background-position: -112px -80px; } #main-menu .ui-icon-folder-collapsed { background-position: 0 -96px; } #main-menu .ui-icon-folder-open { background-position: -16px -96px; } #main-menu .ui-icon-document { background-position: -32px -96px; } #main-menu .ui-icon-document-b { background-position: -48px -96px; } #main-menu .ui-icon-note { background-position: -64px -96px; } #main-menu .ui-icon-mail-closed { background-position: -80px -96px; } #main-menu .ui-icon-mail-open { background-position: -96px -96px; } #main-menu .ui-icon-suitcase { background-position: -112px -96px; } #main-menu .ui-icon-comment { background-position: -128px -96px; } #main-menu .ui-icon-person { background-position: -144px -96px; } #main-menu .ui-icon-print { background-position: -160px -96px; } #main-menu .ui-icon-trash { background-position: -176px -96px; } #main-menu .ui-icon-locked { background-position: -192px -96px; } #main-menu .ui-icon-unlocked { background-position: -208px -96px; } #main-menu .ui-icon-bookmark { background-position: -224px -96px; } #main-menu .ui-icon-tag { background-position: -240px -96px; } #main-menu .ui-icon-home { background-position: 0 -112px; } #main-menu .ui-icon-flag { background-position: -16px -112px; } #main-menu .ui-icon-calendar { background-position: -32px -112px; } #main-menu .ui-icon-cart { background-position: -48px -112px; } #main-menu .ui-icon-pencil { background-position: -64px -112px; } #main-menu .ui-icon-clock { background-position: -80px -112px; } #main-menu .ui-icon-disk { background-position: -96px -112px; } #main-menu .ui-icon-calculator { background-position: -112px -112px; } #main-menu .ui-icon-zoomin { background-position: -128px -112px; } #main-menu .ui-icon-zoomout { background-position: -144px -112px; } #main-menu .ui-icon-search { background-position: -160px -112px; } #main-menu .ui-icon-wrench { background-position: -176px -112px; } #main-menu .ui-icon-gear { background-position: -192px -112px; } #main-menu .ui-icon-heart { background-position: -208px -112px; } #main-menu .ui-icon-star { background-position: -224px -112px; } #main-menu .ui-icon-link { background-position: -240px -112px; } #main-menu .ui-icon-cancel { background-position: 0 -128px; } #main-menu .ui-icon-plus { background-position: -16px -128px; } #main-menu .ui-icon-plusthick { background-position: -32px -128px; } #main-menu .ui-icon-minus { background-position: -48px -128px; } #main-menu .ui-icon-minusthick { background-position: -64px -128px; } #main-menu .ui-icon-close { background-position: -80px -128px; } #main-menu .ui-icon-closethick { background-position: -96px -128px; } #main-menu .ui-icon-key { background-position: -112px -128px; } #main-menu .ui-icon-lightbulb { background-position: -128px -128px; } #main-menu .ui-icon-scissors { background-position: -144px -128px; } #main-menu .ui-icon-clipboard { background-position: -160px -128px; } #main-menu .ui-icon-copy { background-position: -176px -128px; } #main-menu .ui-icon-contact { background-position: -192px -128px; } #main-menu .ui-icon-image { background-position: -208px -128px; } #main-menu .ui-icon-video { background-position: -224px -128px; } #main-menu .ui-icon-script { background-position: -240px -128px; } #main-menu .ui-icon-alert { background-position: 0 -144px; } #main-menu .ui-icon-info { background-position: -16px -144px; } #main-menu .ui-icon-notice { background-position: -32px -144px; } #main-menu .ui-icon-help { background-position: -48px -144px; } #main-menu .ui-icon-check { background-position: -64px -144px; } #main-menu .ui-icon-bullet { background-position: -80px -144px; } #main-menu .ui-icon-radio-off { background-position: -96px -144px; } #main-menu .ui-icon-radio-on { background-position: -112px -144px; } #main-menu .ui-icon-pin-w { background-position: -128px -144px; } #main-menu .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } #main-menu .ui-icon-pause { background-position: -16px -160px; } #main-menu .ui-icon-seek-next { background-position: -32px -160px; } #main-menu .ui-icon-seek-prev { background-position: -48px -160px; } #main-menu .ui-icon-seek-end { background-position: -64px -160px; } #main-menu .ui-icon-seek-first { background-position: -80px -160px; } #main-menu .ui-icon-stop { background-position: -96px -160px; } #main-menu .ui-icon-eject { background-position: -112px -160px; } #main-menu .ui-icon-volume-off { background-position: -128px -160px; } #main-menu .ui-icon-volume-on { background-position: -144px -160px; } #main-menu .ui-icon-power { background-position: 0 -176px; } #main-menu .ui-icon-signal-diag { background-position: -16px -176px; } #main-menu .ui-icon-signal { background-position: -32px -176px; } #main-menu .ui-icon-battery-0 { background-position: -48px -176px; } #main-menu .ui-icon-battery-1 { background-position: -64px -176px; } #main-menu .ui-icon-battery-2 { background-position: -80px -176px; } #main-menu .ui-icon-battery-3 { background-position: -96px -176px; } #main-menu .ui-icon-circle-plus { background-position: 0 -192px; } #main-menu .ui-icon-circle-minus { background-position: -16px -192px; } #main-menu .ui-icon-circle-close { background-position: -32px -192px; } #main-menu .ui-icon-circle-triangle-e { background-position: -48px -192px; } #main-menu .ui-icon-circle-triangle-s { background-position: -64px -192px; } #main-menu .ui-icon-circle-triangle-w { background-position: -80px -192px; } #main-menu .ui-icon-circle-triangle-n { background-position: -96px -192px; } #main-menu .ui-icon-circle-arrow-e { background-position: -112px -192px; } #main-menu .ui-icon-circle-arrow-s { background-position: -128px -192px; } #main-menu .ui-icon-circle-arrow-w { background-position: -144px -192px; } #main-menu .ui-icon-circle-arrow-n { background-position: -160px -192px; } #main-menu .ui-icon-circle-zoomin { background-position: -176px -192px; } #main-menu .ui-icon-circle-zoomout { background-position: -192px -192px; } #main-menu .ui-icon-circle-check { background-position: -208px -192px; } #main-menu .ui-icon-circlesmall-plus { background-position: 0 -208px; } #main-menu .ui-icon-circlesmall-minus { background-position: -16px -208px; } #main-menu .ui-icon-circlesmall-close { background-position: -32px -208px; } #main-menu .ui-icon-squaresmall-plus { background-position: -48px -208px; } #main-menu .ui-icon-squaresmall-minus { background-position: -64px -208px; } #main-menu .ui-icon-squaresmall-close { background-position: -80px -208px; } #main-menu .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } #main-menu .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } #main-menu .ui-icon-grip-solid-vertical { background-position: -32px -224px; } #main-menu .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } #main-menu .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } #main-menu .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ #main-menu .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } #main-menu .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } #main-menu .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } #main-menu .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } #main-menu .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } #main-menu .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } #main-menu .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } #main-menu .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } #main-menu .ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; } /* Overlays */ #main-menu .ui-widget-overlay { background: #2e2e28 url(images/ui-bg_glow-ball_25_2e2e28_600x600.png) 50% 35% repeat-x; opacity: .65; filter:Alpha(Opacity=65); } #main-menu .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #f0f0f0 url(images/ui-bg_flat_35_f0f0f0_40x100.png) 50% 50% repeat-x; opacity: .30; filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; } /* SubMenu */ #main-menu .fg-menu .ui-state-default, #main-menu .fg-menu .ui-widget-content .ui-state-default { border: 1px solid #3d3d3d; background: #282828; font-weight: normal; color: #ffffff; outline: none; } #main-menu .fg-menu .ui-state-default a { color: #ffffff; text-decoration: none; outline: none; } #main-menu .fg-menu .ui-state-hover, #main-menu .fg-menu .ui-widget-content .ui-state-hover, #main-menu .fg-menu .ui-state-focus, #main-menu .fg-menu .ui-widget-content .ui-state-focus { border: 1px solid #409fc6; background: #007fb3; font-weight: normal; color: #ffffff; outline: none; } #main-menu .fg-menu .ui-state-hover a { color: #ffffff; text-decoration: none; outline: none; } #main-menu .fg-menu .ui-state-active, #main-menu .fg-menu .ui-widget-content .ui-state-active { border: 1px solid #161616; background: #161616; font-weight: normal; color: #fff; outline: none; } #main-menu .fg-menu .ui-state-active a { color: #403D38; outline: none; text-decoration: none; } #main-menu .ui-widget-content .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } #main-menu .fg-menu .ui-widget-content .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } #main-menu .fg-menu .ui-state-default .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } #main-menu .fg-menu .ui-state-hover .ui-icon, #main-menu .fg-menu .ui-state-focus .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } #main-menu .fg-menu .ui-state-active .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } ================================================ FILE: newscoop/admin-style/fg.menu.css ================================================ /* Styles for jQuery menu widget Author: Maggie Wachs, maggie@filamentgroup.com Date: September 2008 */ /* Component containers */ .ui-widget { font-family: Arial, Helvetica, sans-serif; } .fg-menu .ui-widget input, .fg-menu .ui-widget select, .fg-menu .ui-widget textarea, .fg-menu .ui-widget button { font-family: Arial, Helvetica, sans-serif; font-size: 1em; } .fg-menu .ui-widget-content { border: 1px solid #161616; background: #202020; color: #fff; } .fg-menu .ui-widget-content a { color: #fff; } .fg-menu .ui-widget-header { border: 1px solid #59584f; background: #3b3b35 url(images/ui-bg_inset-soft_22_3b3b35_1x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } .fg-menu .ui-widget-header a { color: #ffffff; } /* Interaction states */ .fg-menu .ui-state-default, .fg-menu .ui-widget-content .ui-state-default, .fg-button-ui-state-default { border: 1px solid #3b3b3b; background: #3b3b3b; font-weight: normal; color: #ffffff; outline: none; } .fg-menu .ui-state-default a { color: #ffffff; text-decoration: none; outline: none; } .fg-menu .ui-state-hover, .fg-menu .ui-widget-content .ui-state-hover, .fg-menu .ui-state-focus, .fg-menu .ui-widget-content .ui-state-focus, .fg-button-ui-state-focus { border: 1px solid #161616; background: #252525; font-weight: normal; color: #ffffff; outline: none; } .fg-menu .ui-state-hover a { color: #ffffff; text-decoration: none; outline: none; } .fg-menu .ui-state-active, .fg-menu .ui-widget-content .ui-state-active { border: 1px solid #161616; background: #161616; font-weight: normal; color: #fff; outline: none; } .fg-menu .ui-state-active a { color: #403D38; outline: none; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .fg-menu .ui-state-highlight, .fg-menu .ui-widget-content .ui-state-highlight { border: 1px solid #e8e1b5; background: #fcf0ba url(images/ui-bg_glass_55_fcf0ba_1x400.png) 50% 50% repeat-x; color: #363636; } .fg-menu .ui-state-highlight a, .fg-menu .ui-widget-content .ui-state-highlight a { color: #363636; } .fg-menu .ui-state-error, .fg-menu .ui-widget-content .ui-state-error { border: 1px solid #e3a345; background: #ffedad url(images/ui-bg_highlight-soft_95_ffedad_1x100.png) 50% top repeat-x; color: #cd5c0a; } .fg-menu .ui-state-error a, .fg-menu .ui-widget-content .ui-state-error a { color: #cd5c0a; } .fg-menu .ui-state-error-text, .fg-menu .ui-widget-content .ui-state-error-text { color: #cd5c0a; } .fg-menu .ui-state-disabled, .fg-menu .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } .fg-menu .ui-priority-primary, .fg-menu .ui-widget-content .ui-priority-primary { font-weight: bold; } .fg-menu .ui-priority-secondary, .fg-menu .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } /* states and images */ .fg-menu .ui-icon, .fg-button-ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_409fc6_256x240.png); } .fg-menu .ui-widget-content .ui-icon { background-image: url(images/ui-icons_808080_256x240.png); } .fg-menu .ui-widget-header .ui-icon { background-image: url(images/ui-icons_e7e6e4_256x240.png); } .fg-menu .ui-state-default .ui-icon, .fg-button-ui-icon { background-image: url(images/ui-icons_409fc6_256x240.png); } .fg-menu .ui-state-hover .ui-icon, .fg-menu .ui-state-focus .ui-icon, .fg-button-ui-icon { background-image: url(images/ui-icons_409fc6_256x240.png); } .fg-menu .ui-state-active .ui-icon, .fg-button-ui-icon { background-image: url(images/ui-icons_409fc6_256x240.png); } .fg-menu .ui-state-highlight .ui-icon { background-image: url(images/ui-icons_8DC262_256x240.png); } .fg-menu .ui-state-error .ui-icon, .fg-menu .ui-state-error-text .ui-icon { background-image: url(images/ui-icons_cd0a0a_256x240.png); } /* positioning */ .fg-menu .ui-icon-carat-1-n { background-position: 0 0; } .fg-menu .ui-icon-carat-1-ne { background-position: -16px 0; } .fg-menu .ui-icon-carat-1-e { background-position: -32px 0; } .fg-menu .ui-icon-carat-1-se { background-position: -48px 0; } .fg-menu .ui-icon-carat-1-s { background-position: -64px 0; } .fg-menu .ui-icon-carat-1-sw { background-position: -80px 0; } .fg-menu .ui-icon-carat-1-w { background-position: -96px 0; } .fg-menu .ui-icon-carat-1-nw { background-position: -112px 0; } .fg-menu .ui-icon-carat-2-n-s { background-position: -128px 0; } .fg-menu .ui-icon-carat-2-e-w { background-position: -144px 0; } .fg-menu .ui-icon-triangle-1-n { background-position: 0 -16px; } .fg-menu .ui-icon-triangle-1-ne { background-position: -16px -16px; } .fg-menu .ui-icon-triangle-1-e { background-position: -32px -16px; } .fg-menu .ui-icon-triangle-1-se { background-position: -48px -16px; } .fg-button-ui-icon-triangle-1-s { background-position: -64px -16px; } .fg-menu .ui-icon-triangle-1-sw { background-position: -80px -16px; } .fg-menu .ui-icon-triangle-1-w { background-position: -96px -16px; } .fg-menu .ui-icon-triangle-1-nw { background-position: -112px -16px; } .fg-menu .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .fg-menu .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .fg-menu .ui-icon-arrow-1-n { background-position: 0 -32px; } .fg-menu .ui-icon-arrow-1-ne { background-position: -16px -32px; } .fg-menu .ui-icon-arrow-1-e { background-position: -32px -32px; } .fg-menu .ui-icon-arrow-1-se { background-position: -48px -32px; } .fg-menu .ui-icon-arrow-1-s { background-position: -64px -32px; } .fg-menu .ui-icon-arrow-1-sw { background-position: -80px -32px; } .fg-menu .ui-icon-arrow-1-w { background-position: -96px -32px; } .fg-menu .ui-icon-arrow-1-nw { background-position: -112px -32px; } .fg-menu .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .fg-menu .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .fg-menu .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .fg-menu .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .fg-menu .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .fg-menu .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .fg-menu .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .fg-menu .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .fg-menu .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .fg-menu .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .fg-menu .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .fg-menu .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .fg-menu .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .fg-menu .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .fg-menu .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .fg-menu .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .fg-menu .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .fg-menu .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .fg-menu .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .fg-menu .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .fg-menu .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .fg-menu .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .fg-menu .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .fg-menu .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .fg-menu .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .fg-menu .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .fg-menu .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .fg-menu .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .fg-menu .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .fg-menu .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .fg-menu .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .fg-menu .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .fg-menu .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .fg-menu .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .fg-menu .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .fg-menu .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .fg-menu .ui-icon-arrow-4 { background-position: 0 -80px; } .fg-menu .ui-icon-arrow-4-diag { background-position: -16px -80px; } .fg-menu .ui-icon-extlink { background-position: -32px -80px; } .fg-menu .ui-icon-newwin { background-position: -48px -80px; } .fg-menu .ui-icon-refresh { background-position: -64px -80px; } .fg-menu .ui-icon-shuffle { background-position: -80px -80px; } .fg-menu .ui-icon-transfer-e-w { background-position: -96px -80px; } .fg-menu .ui-icon-transferthick-e-w { background-position: -112px -80px; } .fg-menu .ui-icon-folder-collapsed { background-position: 0 -96px; } .fg-menu .ui-icon-folder-open { background-position: -16px -96px; } .fg-menu .ui-icon-document { background-position: -32px -96px; } .fg-menu .ui-icon-document-b { background-position: -48px -96px; } .fg-menu .ui-icon-note { background-position: -64px -96px; } .fg-menu .ui-icon-mail-closed { background-position: -80px -96px; } .fg-menu .ui-icon-mail-open { background-position: -96px -96px; } .fg-menu .ui-icon-suitcase { background-position: -112px -96px; } .fg-menu .ui-icon-comment { background-position: -128px -96px; } .fg-menu .ui-icon-person { background-position: -144px -96px; } .fg-menu .ui-icon-print { background-position: -160px -96px; } .fg-menu .ui-icon-trash { background-position: -176px -96px; } .fg-menu .ui-icon-locked { background-position: -192px -96px; } .fg-menu .ui-icon-unlocked { background-position: -208px -96px; } .fg-menu .ui-icon-bookmark { background-position: -224px -96px; } .fg-menu .ui-icon-tag { background-position: -240px -96px; } .fg-menu .ui-icon-home { background-position: 0 -112px; } .fg-menu .ui-icon-flag { background-position: -16px -112px; } .fg-menu .ui-icon-calendar { background-position: -32px -112px; } .fg-menu .ui-icon-cart { background-position: -48px -112px; } .fg-menu .ui-icon-pencil { background-position: -64px -112px; } .fg-menu .ui-icon-clock { background-position: -80px -112px; } .fg-menu .ui-icon-disk { background-position: -96px -112px; } .fg-menu .ui-icon-calculator { background-position: -112px -112px; } .fg-menu .ui-icon-zoomin { background-position: -128px -112px; } .fg-menu .ui-icon-zoomout { background-position: -144px -112px; } .fg-menu .ui-icon-search { background-position: -160px -112px; } .fg-menu .ui-icon-wrench { background-position: -176px -112px; } .fg-menu .ui-icon-gear { background-position: -192px -112px; } .fg-menu .ui-icon-heart { background-position: -208px -112px; } .fg-menu .ui-icon-star { background-position: -224px -112px; } .fg-menu .ui-icon-link { background-position: -240px -112px; } .fg-menu .ui-icon-cancel { background-position: 0 -128px; } .fg-menu .ui-icon-plus { background-position: -16px -128px; } .fg-menu .ui-icon-plusthick { background-position: -32px -128px; } .fg-menu .ui-icon-minus { background-position: -48px -128px; } .fg-menu .ui-icon-minusthick { background-position: -64px -128px; } .fg-menu .ui-icon-close { background-position: -80px -128px; } .fg-menu .ui-icon-closethick { background-position: -96px -128px; } .fg-menu .ui-icon-key { background-position: -112px -128px; } .fg-menu .ui-icon-lightbulb { background-position: -128px -128px; } .fg-menu .ui-icon-scissors { background-position: -144px -128px; } .fg-menu .ui-icon-clipboard { background-position: -160px -128px; } .fg-menu .ui-icon-copy { background-position: -176px -128px; } .fg-menu .ui-icon-contact { background-position: -192px -128px; } .fg-menu .ui-icon-image { background-position: -208px -128px; } .fg-menu .ui-icon-video { background-position: -224px -128px; } .fg-menu .ui-icon-script { background-position: -240px -128px; } .fg-menu .ui-icon-alert { background-position: 0 -144px; } .fg-menu .ui-icon-info { background-position: -16px -144px; } .fg-menu .ui-icon-notice { background-position: -32px -144px; } .fg-menu .ui-icon-help { background-position: -48px -144px; } .fg-menu .ui-icon-check { background-position: -64px -144px; } .fg-menu .ui-icon-bullet { background-position: -80px -144px; } .fg-menu .ui-icon-radio-off { background-position: -96px -144px; } .fg-menu .ui-icon-radio-on { background-position: -112px -144px; } .fg-menu .ui-icon-pin-w { background-position: -128px -144px; } .fg-menu .ui-icon-pin-s { background-position: -144px -144px; } .fg-menu .ui-icon-play { background-position: 0 -160px; } .fg-menu .ui-icon-pause { background-position: -16px -160px; } .fg-menu .ui-icon-seek-next { background-position: -32px -160px; } .fg-menu .ui-icon-seek-prev { background-position: -48px -160px; } .fg-menu .ui-icon-seek-end { background-position: -64px -160px; } .fg-menu .ui-icon-seek-first { background-position: -80px -160px; } .fg-menu .ui-icon-stop { background-position: -96px -160px; } .fg-menu .ui-icon-eject { background-position: -112px -160px; } .fg-menu .ui-icon-volume-off { background-position: -128px -160px; } .fg-menu .ui-icon-volume-on { background-position: -144px -160px; } .fg-menu .ui-icon-power { background-position: 0 -176px; } .fg-menu .ui-icon-signal-diag { background-position: -16px -176px; } .fg-menu .ui-icon-signal { background-position: -32px -176px; } .fg-menu .ui-icon-battery-0 { background-position: -48px -176px; } .fg-menu .ui-icon-battery-1 { background-position: -64px -176px; } .fg-menu .ui-icon-battery-2 { background-position: -80px -176px; } .fg-menu .ui-icon-battery-3 { background-position: -96px -176px; } .fg-menu .ui-icon-circle-plus { background-position: 0 -192px; } .fg-menu .ui-icon-circle-minus { background-position: -16px -192px; } .fg-menu .ui-icon-circle-close { background-position: -32px -192px; } .fg-menu .ui-icon-circle-triangle-e { background-position: -48px -192px; } .fg-menu .ui-icon-circle-triangle-s { background-position: -64px -192px; } .fg-menu .ui-icon-circle-triangle-w { background-position: -80px -192px; } .fg-menu .ui-icon-circle-triangle-n { background-position: -96px -192px; } .fg-menu .ui-icon-circle-arrow-e { background-position: -112px -192px; } .fg-menu .ui-icon-circle-arrow-s { background-position: -128px -192px; } .fg-menu .ui-icon-circle-arrow-w { background-position: -144px -192px; } .fg-menu .ui-icon-circle-arrow-n { background-position: -160px -192px; } .fg-menu .ui-icon-circle-zoomin { background-position: -176px -192px; } .fg-menu .ui-icon-circle-zoomout { background-position: -192px -192px; } .fg-menu .ui-icon-circle-check { background-position: -208px -192px; } .fg-menu .ui-icon-circlesmall-plus { background-position: 0 -208px; } .fg-menu .ui-icon-circlesmall-minus { background-position: -16px -208px; } .fg-menu .ui-icon-circlesmall-close { background-position: -32px -208px; } .fg-menu .ui-icon-squaresmall-plus { background-position: -48px -208px; } .fg-menu .ui-icon-squaresmall-minus { background-position: -64px -208px; } .fg-menu .ui-icon-squaresmall-close { background-position: -80px -208px; } .fg-menu .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .fg-menu .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .fg-menu .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .fg-menu .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .fg-menu .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .fg-menu .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Corner radius */ .fg-menu .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } .fg-menu .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } .fg-menu .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } .fg-menu .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } .fg-menu .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } .fg-menu .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } .fg-menu .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } .fg-menu .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } .fg-menu-container.ui-corner-all, .fg-menu .ui-corner-all, .fg-button-ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; } /* Overlays */ .fg-menu .ui-widget-overlay { background: #2e2e28 url(images/ui-bg_glow-ball_25_2e2e28_600x600.png) 50% 35% repeat-x; opacity: .65; filter:Alpha(Opacity=65); } .fg-menu .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #f0f0f0 url(images/ui-bg_flat_35_f0f0f0_40x100.png) 50% 50% repeat-x; opacity: .30; filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; } /* SubMenu */ .fg-menu .ui-state-default, .fg-menu .ui-widget-content .ui-state-default, .fg-menu-container.ui-widget { border: 1px solid #3d3d3d; background: #282828; font-weight: normal; color: #ffffff; outline: none; } .fg-menu .ui-state-default a, .fg-button-ui-state-default a, .fg-menu-container.ui-widget a { color: #ffffff; text-decoration: none; outline: none; } .fg-menu .ui-state-hover, .fg-menu .ui-widget-content .ui-state-hover, .fg-menu .ui-state-focus, .fg-menu .ui-widget-content .ui-state-focus { border: 1px solid #409fc6; background: #007fb3; font-weight: normal; color: #ffffff; outline: none; } .fg-menu .ui-state-hover a { color: #ffffff; text-decoration: none; outline: none; } .fg-menu .ui-state-active, .fg-menu .fg-menu .ui-widget-content .ui-state-active { border: 1px solid #161616; background: #161616; font-weight: normal; color: #fff; outline: none; } .fg-menu .ui-state-active a { color: #403D38; outline: none; text-decoration: none; } .fg-menu .ui-widget-content .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .fg-menu .ui-widget-content .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .fg-menu .ui-state-default .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .fg-menu .ui-state-hover .ui-icon, .fg-menu .ui-state-focus .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .fg-menu .ui-state-active .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .fg-menu-container.ui-widget .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } /* REQUIRED STYLES - the menus will only render correctly with these rules */ .fg-menu-container { position: absolute; top:0; left:-999px; padding: .4em; overflow: hidden; border-top-right-radius: 0 !important; border-top-left-radius: 0 !important; } .fg-menu-container.fg-menu-flyout { overflow: visible; } .fg-menu, .fg-menu ul { list-style-type:none; padding: 0; margin:0; } .fg-menu { position:relative; } .fg-menu-flyout .fg-menu { position:static; } .fg-menu ul { position:absolute; top:0; } .fg-menu ul ul { top:-1px; } .fg-menu-container.fg-menu-ipod .fg-menu-content, .fg-menu-container.fg-menu-ipod .fg-menu-content ul { background: none !important; } .fg-menu.fg-menu-scroll, .fg-menu ul.fg-menu-scroll { overflow: scroll; overflow-x: hidden; } .fg-menu li { clear:both; float:left; width:100%; padding:0; border: 0; } .fg-menu li li { font-size:1em; } /* inner li font size must be reset so that they don't blow up */ .fg-menu-flyout ul ul { padding: .4em; } .fg-menu-flyout li { position:relative; } .fg-menu-scroll { overflow: scroll; overflow-x: hidden; } .fg-menu-breadcrumb { margin: 0; padding: 0; } .fg-menu-footer { margin-top: .4em; padding: .4em; } .fg-menu-header { margin-bottom: .4em; padding: .4em; } .fg-menu-breadcrumb li { float: left; list-style: none; margin: 0; padding: 0 .2em; font-size: .9em; opacity: .7; } .fg-menu-breadcrumb li.fg-menu-prev-list, .fg-menu-breadcrumb li.fg-menu-current-crumb { clear: left; float: none; opacity: 1; } .fg-menu-breadcrumb li.fg-menu-current-crumb { padding-top: .2em; } .fg-menu-breadcrumb a, .fg-menu-breadcrumb span { float: left; } .fg-menu-footer a:link, .fg-menu-footer a:visited { float:left; width:100%; text-decoration: none; } .fg-menu-footer a:hover, .fg-menu-footer a:active { } .fg-menu-footer a span { float:left; cursor: pointer; } .fg-menu-breadcrumb .fg-menu-prev-list a:link, .fg-menu-breadcrumb .fg-menu-prev-list a:visited, .fg-menu-breadcrumb .fg-menu-prev-list a:hover, .fg-menu-breadcrumb .fg-menu-prev-list a:active { background-image: none; text-decoration:none; } .fg-menu-breadcrumb .fg-menu-prev-list a { float: left; padding-right: .4em; } .fg-menu-breadcrumb .fg-menu-prev-list a .ui-icon { float: left; } .fg-menu-breadcrumb .fg-menu-current-crumb a:link, .fg-menu-breadcrumb .fg-menu-current-crumb a:visited, .fg-menu-breadcrumb .fg-menu-current-crumb a:hover, .fg-menu-breadcrumb .fg-menu-current-crumb a:active { display:block; background-image:none; font-size:1.3em; text-decoration:none; } /* REQUIRED LINK STYLES: links are "display:block" by default; if the menu options are split into selectable node links and 'next' links, the script floats the node links left and floats the 'next' links to the right */ .fg-menu a:link, .fg-menu a:visited, .fg-menu a:hover, .fg-menu a:active { float:left; width:92%; padding:.3em 3%; text-decoration:none; outline: 0 !important; } .fg-menu a { border: 1px dashed transparent; } .fg-menu a.ui-state-default:link, .fg-menu a.ui-state-default:visited, .fg-menu a.ui-state-default:hover, .fg-menu a.ui-state-default:active, .fg-menu a.ui-state-hover:link, .fg-menu a.ui-state-hover:visited, .fg-menu a.ui-state-hover:hover, .fg-menu a.ui-state-hover:active, .fg-menu a.ui-state-active:link, .fg-menu a.ui-state-active:visited, .fg-menu a.ui-state-active:hover, .fg-menu a.ui-state-active:active { border-style: solid; font-weight: normal; } .fg-menu a span { display:block; cursor:pointer; } /* SUGGESTED STYLES - for use with jQuery UI Themeroller CSS */ .fg-menu-indicator span { float:left; } .fg-menu-indicator span.ui-icon { float:right; } .fg-menu-content.ui-widget-content, .fg-menu-content ul.ui-widget-content { border:0; } /* ICONS AND DIVIDERS */ .fg-menu.fg-menu-has-icons a:link, .fg-menu.fg-menu-has-icons a:visited, .fg-menu.fg-menu-has-icons a:hover, .fg-menu.fg-menu-has-icons a:active { padding-left:20px; } .fg-menu .horizontal-divider hr, .fg-menu .horizontal-divider span { padding:0; margin:5px .6em; } .fg-menu .horizontal-divider hr { border:0; height:1px; } .fg-menu .horizontal-divider span { font-size:.9em; text-transform: uppercase; padding-left:.2em; } /* ADDING NEW LOOK TO OLD MENU */ .logo { margin: 8px 16px 0 0; } ul.navigation { height: 38px; margin-top: -1px; line-height: 16px; } ul.navigation li { margin-right: 0px; } .main-menu-bar { padding: 1px 0px; } .fg-menu a:link, .fg-menu a:visited, .fg-menu a:hover, .fg-menu a:active { width: 100%; } .fg-menu-container, .fg-menu-flyout ul ul { padding: 4px 0px; } .fg-menu-indicator span.ui-icon { position: absolute; right: 4px; } .fg-menu li a { padding-left: 20px !important; box-sizing: border-box; } a.fg-button-menu { font-size: 12px !important; padding: 9px 25px 9px 15px;} .fg-button-icon-right .fg-button-ui-icon { right: 7px; } .fg-menu .ui-icon-triangle-1-e { opacity: 0.4; } .fg-button-ui-icon-triangle-1-s { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: gray; -webkit-filter: grayscale(1); opacity: 0.7; } .fg-button-ui-corner-all, .fg-menu .ui-state-hover { -moz-border-radius: 0px; -webkit-border-radius: 0px; } .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #535353; } a.latest-published.fg-menu-indicator { background-color: #008148; } ================================================ FILE: newscoop/admin-style/form.css ================================================ dl.zend_form { width: 550px; margin: 0; padding: 10px; background-color: #fff; border: 1px solid #9d9d9d; -mozilla-box-shadow: 2px 2px 3px #ccc; -webkit-box-shadow: 2px 2px 3px #d4d4d4; box-shadow: 2px 2px 3px #e5e5e5; } body.with-sidebar dl.zend_form { width: auto; } .zend_form dt { margin-top: 8px; padding: 0; position: relative; font-weight: bold; color: #696969; } .zend_form dt:first-child { margin-top: 0; } .zend_form dd { margin: 4px 0 0; padding: 0; } .zend_form dd .description{ font-size: 11px; } .zend_form dd input[type=text], .zend_form dd input[type=password] { display: block; width: 80%; color: #333; background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); } .zend_form dd textarea { display: block; color: #333; background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; margin: 0; padding: 0; text-indent: 3px; -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); } .zend_form dd input[type=password] { width: 50%; background-color: #F8F8F8; } .zend_form dd input[type=file] { width: 80%; } .zend_form dd input[type=text]:focus, .zend_form dd input[type=password]:focus, .zend_form dd textarea:focus { border: 1px solid #00b5f1; } .zend_form dd input.small { width: 40px; } .zend_form dd select { width: 50%; margin: 0; padding: 3px 5px; border: 1px solid #9d9d9d; } .zend_form dd ul.errors { margin: 3px 0; padding: 0 8px; } .zend_form dd ul.errors li { font-size: 1.1em; color: #cc0000; } .zend_form fieldset { border: 1px solid #ccc; } .zend_form fieldset.closed { border-left-color: #fff; border-bottom-color: #fff; border-right-color: #fff; } .zend_form fieldset legend .ui-icon { float: left; } .zend_form dd input[type=submit] { margin: 0; padding: 3px 12px 4px; color: #fff; background-color: #007fb3; background: -moz-linear-gradient(top, #2390bd 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #2390bd), color-stop(100%, #007fb3)); border: 1px solid #007fb3; cursor: pointer; } .zend_form dd input[type=submit]:hover { border: 1px solid #005e85; background: #005e85; background: -moz-linear-gradient(top, #409fc6 0, #007fb3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #409fc6), color-stop(100%, #007fb3)); } .zend_form dd.buttons { margin-top: 13px; padding: 0; } .zend_form label { cursor: pointer; } .zend_form label[for=type-allow], .zend_form label[for=type-deny] { display: block; line-height: 21px; color: #444; background-color: #b4b4b4; border-radius: 5px; } .zend_form label[for=type-allow] input, .zend_form label[for=type-deny] input { vertical-align: top; } .zend_form label[for=type-allow].checked { color: #fff; background-color: #55a112; } .zend_form label[for=type-deny].checked { color: #fff; background-color: #da0101; } /** Filter form */ .filter dl.zend_form { height: 1%; overflow: hidden; margin: 0; padding: 5px; background-color: transparent; border: none; -mozilla-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .filter dl.zend_form > * { float: left; margin: 0; padding: 0; line-height: 23px; } .filter dl.zend_form dt { padding-top: 1px; } .filter dl.zend_form dd { margin-left: 1em; } .filter dl.zend_form dd * { width: auto; } .popup .zend_form { border: none; padding: 0 0 12px 0; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; margin:0; width: 100%; } form.popup dd input[type="text"] { width: 99%; } h1 .inline.zend_form { display: inline; float: none; text-align: left; background-color: transparent; border: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; } h1 .inline dt { display: none; } h1 .inline dd { display: inline; } h1 .inline .top-input { float: none; } h1 .inline #name { width: 34em; display: inline; } h1 .inline #submit { } .form-div-container { width: 100%; } .form-div { float: left; } .form-div.left-box { width: 48%; margin-right: 1%; } .form-div.right-box { width: 51%; } ================================================ FILE: newscoop/admin-style/image_management.css ================================================ #next input[type=text] { border:#9d9d9d solid 1px; box-shadow:inset 0 1px 2px rgba(0,0,0,0.2); height: 18px !important; margin: 0 5px 0 0; } #next input[type=submit] { padding: 3px 9px 2px 9px; color: #444444; font-family: Arial,Helvetica,sans-serif; font-size: 12px; font-weight: normal; line-height: 17px; margin: 0 6px 0 0; outline: medium none; background: -moz-linear-gradient(center top , #FAFAFA 0pt, #F6F6F6 100%) repeat scroll 0 0 transparent; border: 1px solid #9D9D9D; } ul.renditions, ul.slideshow { padding:5px 7px; margin:0; box-shadow:inset 0 2px 4px rgba(0,0,0,0.2), inset 0 -2px 2px rgba(0,0,0,0.1); } ul.renditions.editor {box-shadow:inset 0 2px 2px rgba(0,0,0,0.2);} ul.renditions li, ul.slideshow li, ul.thumbnails li { background:none; border:#b0b0b0 solid 1px; border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px; } ul.renditions li:hover, ul.slideshow li:hover, ul.thumbnails li:hover { border:#808080 solid 1px; box-shadow:0 1px 3px rgba(0,0,0,0.25); } ul.renditions li.state-active, ul.renditions li.state-active:hover, ul.renditions li.active, ul.renditions li.active:hover { background:#d9eaf9; border:#007fb3 solid 1px !important; box-shadow:0 1px 5px rgba(0,0,0,0.25); } ul.renditions li dl.rendition .preview, ul.renditions li.state-active dl.rendition .preview {border-color:#4e4e4e;} ul.renditions li dl dd.name { padding: 5px 0 0; font-size:12px; color:#2e2e2e; text-shadow:0 1px 1px #fff; text-align:center; } ul.renditions li dl.rendition dd small { display:block; padding: 0 0 5px; font-size:12px; color:#2e2e2e; text-shadow:0 1px 1px #fff; text-align:center; } ul.thumbnails li {background:#fff;} ul.renditions li {background:#dddddd;} ul.slideshow li { padding-top:18px; background:url(images/slideshow-item-top.png) 5px 4px no-repeat #ebebeb; box-shadow:0 1px 5px rgba(0,0,0,0.25); border:#929292 solid 1px; } ul.slideshow li:hover { border:#646464 solid 1px; box-shadow:0 1px 2px rgba(0,0,0,0.55); } ul.slideshow li.active, ul.slideshow li.active:hover { border:#007fb3 solid 1px !important; box-shadow:0 1px 5px rgba(0,0,0,0.25); } ul.slideshow li.placeholder, ul.slideshow li.placeholder:hover { height:84px; padding-top:65px; font-size:12px; font-weight:bold; color:#787878; text-align:center; text-shadow:0 1px 1px #fff; background-image:none; box-shadow:none; border: 2px dashed #B0B0B0; } .slideshow a figcaption { overflow:hidden; height:28px; } ul.slideshow li a.remove { right:1px; top:3px; width:14px; height:11px; text-indent:-9999px; background:none; padding:0 !important; background:#ebebeb url(images/slide_delete.png) no-repeat 2px 0; opacity:1; } ul.slideshow li a.remove:hover { background-position:2px -11px; } .popup-tabs { padding-top:10px; background:#f5f5f5; border:#cccccc solid 1px !important; border-width:1px 0 0 0 !important; } .popup-tabs ul.ui-tabs-nav { padding:3px 0 0; margin: 0 6px 6px 8px; background:none; border:0; border-bottom:#9d9d9d solid 1px; } .popup-tabs ul.ui-tabs-nav li {margin-right:5px;} .popup-tabs ul.ui-tabs-nav li.ui-tabs-selected {background:#f5f5f5;} #next .button { padding: 3px 9px 2px 9px; color: #444444; font-family: Arial,Helvetica,sans-serif; font-size: 12px; font-weight: normal; line-height: 17px; margin: 0 6px 0 0; outline: medium none; background: -moz-linear-gradient(center top , #FAFAFA 0pt, #F6F6F6 100%) repeat scroll 0 0 transparent; border: 1px solid #9D9D9D; } #next .button:hover { background: -moz-linear-gradient(center top , #2390BD 0pt, #007FB3 100%) repeat scroll 0 0 transparent; border: 1px solid #007FB3; color: #FFFFFF; } #next .editarea, #next .top-shadow {box-shadow:inset 0 1px 4px rgba(0,0,0,0.1);} #next .top-shadow {margin:0; padding:10px; } #next .editarea > div { position:relative; } #next .editarea h2 { padding:0; font-size:13px; color:#444444; } #next .editarea h2 small { color:#7f7f7f; font-style:italic; } #next .editarea input[type="text"] { width: 98.5%; margin:3px 0 3px 0; } #next .editarea div#editor { display:block; padding:6px 126px 6px 6px; background:#d9d9d9; border:1px solid #b0b0b0; box-shadow:inset 0 1px 2px rgba(0,0,0,0.2); min-height:32px; } #next .editarea div#editor img{ margin-right:120px; } #next .editarea > div .save-button { position:absolute; top:41px; right:7px; color:#fff; border:1px solid #007fb3; min-width:114px; } #image-archive { padding-top:10px; } #image-archive .paginationControl { color: #f5f5f5; padding:3px 0 4px 8px; } #image-archive .paginationControl span, #image-archive .paginationControl a { display:inline-block; color:#3b3b3b; font-size:12px; padding:3px 12px; border:#9d9d9d solid 1px; } #image-archive .paginationControl span { color:#dbdbdb; border:#e5e5e5 solid 1px; } #next .inline { padding: 0 10px; } #next .inline.top-shadow { padding: 10px; } #next #image-search { margin: 12px 8px 0 8px; } #next #image-search button { font-size:13px !important; } #slideshow-rendition-info { padding-left: 1em; font-size: 0.8em; color: #ccc; } ================================================ FILE: newscoop/admin-style/jScrollPane.css ================================================ .jScrollPaneContainer { position: relative; overflow: hidden; z-index: 1; height:200px; } .jScrollPaneTrack { position: absolute; cursor: pointer; right: 0; top: 0; height: 100%; background: #aaa; } .jScrollPaneDrag { position: absolute; background: #666; cursor: pointer; overflow: hidden; } .jScrollPaneDragTop { position: absolute; top: 0; left: 0; overflow: hidden; } .jScrollPaneDragBottom { position: absolute; bottom: 0; left: 0; overflow: hidden; } a.jScrollArrowUp { display: block; position: absolute; z-index: 1; top: 0; right: 0; text-indent: -2000px; overflow: hidden; /*background-color: #666;*/ height: 9px; } a.jScrollArrowUp:hover { /*background-color: #f60;*/ } a.jScrollArrowDown { display: block; position: absolute; z-index: 1; bottom: 0; right: 0; text-indent: -2000px; overflow: hidden; /*background-color: #666;*/ height: 9px; } a.jScrollArrowDown:hover { /*background-color: #f60;*/ } a.jScrollActiveArrowButton, a.jScrollActiveArrowButton:hover { /*background-color: #f00;*/ } ================================================ FILE: newscoop/admin-style/jquery-ui-1.8.6.custom.css ================================================ /* * jQuery UI CSS Framework 1.8.6 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } /* * jQuery UI CSS Framework 1.8.6 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.2em&cornerRadius=0px&bgColorHeader=ebebeb&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=50&borderColorHeader=d3d3d3&fcHeader=444444&iconColorHeader=007fb3&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=dddddd&fcContent=444444&iconColorContent=ff0084&bgColorDefault=f6f6f6&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=100&borderColorDefault=d3d3d3&fcDefault=3b3b3b&iconColorDefault=666666&bgColorHover=007fb3&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=25&borderColorHover=007fb3&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=d3d3d3&fcActive=007fb3&iconColorActive=454545&bgColorHighlight=eff6eb&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=65a539&fcHighlight=65a539&iconColorHighlight=65a539&bgColorError=fae5e5&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=d00000&fcError=d00000&iconColorError=d00000&bgColorOverlay=9d9d9d&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=50&bgColorShadow=6c6c6c&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=6px&offsetTopShadow=-6px&offsetLeftShadow=-6px&cornerRadiusShadow=0px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Helvetica, Arial, sans-serif; font-size: 1.2em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Helvetica, Arial, sans-serif; font-size: 12px; } .ui-widget-content { border: 1px solid #9d9d9d; background: #ffffff; color: #444444; } .ui-widget-content a { color: #444444; } .ui-widget-header { border: 1px solid #9d9d9d; background: #ebebeb url(images/ui-bg_highlight-soft_50_ebebeb_1x100.png) 50% 50% repeat-x; color: #444444; font-weight: bold; } .ui-widget-header a { color: #444444; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #9d9d9d; background: #f6f6f6 url(images/ui-bg_highlight-soft_100_f6f6f6_1x100.png) 50% 50% repeat-x; color: #3b3b3b; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #3b3b3b; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #007fb3; background: #007fb3 url(images/ui-bg_highlight-soft_25_007fb3_1x100.png) 50% 50% repeat-x; color: #ffffff; } .ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #9d9d9d; background: #ffffff url(images/ui-bg_flat_65_ffffff_40x100.png) 50% 50% repeat-x; color: #007fb3; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #007fb3; text-decoration: none; } .ui-widget :active { outline: none; } .ui-widget-header .ui-state-default, .ui-widget-header .ui-state-hover, .ui-widget-header .ui-state-focus, .ui-widget-header .ui-state-active { font-weight:bold; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #65a539; background: #eff6eb url(images/ui-bg_flat_55_eff6eb_40x100.png) 50% 50% repeat-x; color: #65a539; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { color: #65a539; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #d00000; background: #fae5e5 url(images/ui-bg_flat_55_fae5e5_40x100.png) 50% 50% repeat-x; color: #d00000; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #d00000; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #d00000; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_666666_256x240.png); } .ui-widget-content .ui-icon { background-image: url(images/ui-icons_666666_256x240.png); } .ui-widget-header .ui-icon { background-image: url(images/ui-icons_007fb3_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_666666_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon { background-image: url(images/ui-icons_ffffff_256x240.png); } .ui-state-active .ui-icon { background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon { background-image: url(images/ui-icons_65a539_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background-image: url(images/ui-icons_d00000_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 0px; -webkit-border-top-left-radius: 0px; border-top-left-radius: 0px; } .ui-corner-tr { -moz-border-radius-topright: 0px; -webkit-border-top-right-radius: 0px; border-top-right-radius: 0px; } .ui-corner-bl { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; } .ui-corner-br { -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .ui-corner-top { -moz-border-radius-topleft: 0px; -webkit-border-top-left-radius: 0px; border-top-left-radius: 0px; -moz-border-radius-topright: 0px; -webkit-border-top-right-radius: 0px; border-top-right-radius: 0px; } .ui-corner-bottom { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .ui-corner-right { -moz-border-radius-topright: 0px; -webkit-border-top-right-radius: 0px; border-top-right-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .ui-corner-left { -moz-border-radius-topleft: 0px; -webkit-border-top-left-radius: 0px; border-top-left-radius: 0px; -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; } .ui-corner-all { -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } /* Overlays */ .ui-widget-overlay { background: #9d9d9d url(images/ui-bg_flat_0_9d9d9d_40x100.png) 50% 50% repeat-x; opacity: .50; filter:Alpha(Opacity=50); } .ui-widget-shadow { margin: -6px 0 0 -6px; padding: 6px; background: #6c6c6c url(images/ui-bg_flat_0_6c6c6c_40x100.png) 50% 50% repeat-x; opacity: .60; filter:Alpha(Opacity=60); -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }/* * jQuery UI Resizable 1.8.6 * * 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/Resizable#theming */ .ui-resizable { position: relative; } .ui-resizable-handle { position: absolute; font-size: 0.1px; z-index: 99999; display: block; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px; }/* * jQuery UI Selectable 1.8.6 * * 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/Selectable#theming */ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } /* * jQuery UI Accordion 1.8.6 * * 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/Accordion#theming */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; font-weight:bold; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 10px; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; }/* * jQuery UI Autocomplete 1.8.6 * * 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#theming */ .ui-autocomplete { position: absolute; cursor: default; } /* workarounds */ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ /* * jQuery UI Menu 1.8.6 * * 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/Menu#theming */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float: left; } .ui-menu .ui-menu { margin-top: -3px; } .ui-menu .ui-menu-item { margin:0; padding: 0; zoom: 1; float: left; clear: left; width: 100%; } .ui-menu .ui-menu-item a { text-decoration:none; display:block; padding:.2em .4em; line-height:1.5; zoom:1; } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } /* * jQuery UI Button 1.8.6 * * 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/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /* * jQuery UI Dialog 1.8.6 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: .4em; width: 300px; overflow: hidden; border-width:3px; } .ui-dialog .ui-dialog-titlebar { padding: 6px 8px 6px 8px; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; border-color:#dedede; background-image: none; margin: .3em -0.4em 0 -0.4em; padding: .3em 1em 0em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /* * jQuery UI Slider 1.8.6 * * 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/Slider#theming */ .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; }/* * jQuery UI Tabs 1.8.6 * * 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#theming */ .ui-tabs { position: relative; padding: 4px; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; /*padding: 1em 1.4em;*/ background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } /* * jQuery UI Datepicker 1.8.6 * * 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/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year { width: 100%; } .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%; } .ui-datepicker table { width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }/* * jQuery UI Progressbar 1.8.6 * * 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#theming */ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value { margin: -1px; height:100%; } ================================================ FILE: newscoop/admin-style/jquery-ui-1.8.6.datepicker.css ================================================ /* * jQuery UI CSS Framework 1.8.6 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } /* * jQuery UI CSS Framework 1.8.6 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } .ui-widget-header a { color: #ffffff; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; } .ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; } .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } .ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } .ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } .ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } .ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } .ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* * jQuery UI Datepicker 1.8.6 * * 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/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ } ================================================ FILE: newscoop/admin-style/layout.css ================================================ body { margin: 0; padding: 0; } body > .content { margin: 22px 30px; } .content-sidebar { width: 800px; height: 1%; overflow: hidden; margin: 22px 30px; padding: 0 0 2px; background: transparent url('images/content-sidebar-bg.png') repeat-y 441px 0; } .content-sidebar .content { float: left; width: 420px; min-height: 1em; margin: 0; } .content-sidebar .sidebar { float: right; clear: right; width: 320px; margin: 22px 15px 0 0; background-color: #fff; border: 1px solid #a9a9a9; -mozilla-box-shadow: 1px 1px 1px #ccc; -webkit-box-shadow: 2px 2px 3px #d4d4d4; box-shadow: 1px 1px 1px #e5e5e5; } .content-sidebar .sidebar.first { margin-top: 0; } ================================================ FILE: newscoop/admin-style/lists.css ================================================ @charset "utf-8"; /* CSS Document */ /* List View //////////////////////////////////////////////////////////////////// Basic list for switching between list view and grid view. ////////////////////////////////////////////////////////////////////////////////*/ .list-view { list-style-type:none; margin:0; padding:0; } .list-view.list > li { margin:0; padding:8px 10px; border-bottom:1px solid #ccc; } .list-view.list > li:hover { background:#fff; } .list-view.list > li.selected, .list-view.list > li.active, .list-view.list > li.selected:hover, .list-view.list > li.activeHover { background:#d9eaf9; } /*.rounded li { border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px;}*/ .list-view.grid { padding: 6px 8px 0 8px; } .list-view.grid > li { background:#fff; border: 1px solid #b0b0b0; display: inline-block; margin: 7px 5px; padding: 4px 4px 12px 4px; width: 152px; min-height:164px; border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px; } .list-view.grid > li:hover { border:#808080 solid 1px; box-shadow:0 1px 3px rgba(0,0,0,0.15); } .list-view.grid > li.selected, .list-view.grid > li.active, .list-view.grid > li.selected:hover, .list-view.grid > li.activeHover { background:#d9eaf9; border:#007fb3 solid 1px !important; box-shadow:0 1px 5px rgba(0,0,0,0.25); } ================================================ FILE: newscoop/admin-style/map-filter.css ================================================ .map_filter_toolbar { background: #ffffff; width: 1020px; margin: 0px auto; height: 0px; padding: 9px 8px 0px 14px; } .map_filter_info { margin-left: 2px; margin-top: 2px; margin-bottom: 4px; height: 24px; font-size: 18px; } .map_show_filter { margin-left: auto; margin-right: auto; margin-top: 10px; width: 800px; } .geo_filter_map_actions { float: right; } .map_hidden { display: none; } .geo_map_show_initial { font-size: 12px; } .geo_filter_polygon_actions { font-size: 14px; color: #000000; } .geo_filter_unselected { /*color: #666666;*/ /*background: #666666;*/ } .geo_filter_selected { /*color: #666666;*/ /*background: #d0d0ff;*/ /*color: #000088;*/ color: #663300; } .polygon_info { margin-top: 5px; font-size: 12px; } .polygon_info_label { font-size: 14px; margin-top: 10px; margin-bottom: 10px; } .geo_polygon_labels { height: 18px; } .geo_polygon_type_info { float: left; margin-left: 10px; } .geo_polygon_remove { float:left; } .geo_polkygon_info { width: 800px; height: 100%; } .geo_polygon_info_std { float:left; color: #000000; width: 800px; } .geo_polygon_info_edited { float:left; color: #663300; width: 800px; } .geo_polygon_type_convex { color: #000000; } .geo_polygon_type_concave { color: #ff0000; } .geo_polygon_type_within_dl { color: #000000; } .geo_polygon_type_over_dl { color: #ff0000; } .geo_add_polygon { float: left; } .geo_polygon_new { border: 2px solid #fffff0; background: #ebebff; } .polygon_append { width: 800px; margin-bottom: 10px; } .geo_filter_polygon_spacer { width: 800px; } ================================================ FILE: newscoop/admin-style/map-picking.css ================================================ .map_editor { margin: 0 auto ; width: 1050px; } a.map_name_display:link { text-decoration: none; color:#007fb3; } a.map_name_display:visited { text-decoration: none; color:#007fb3; } a.map_name_display:hover { text-decoration: none; background-color:#edf6f9; color:#007fb3; } .map_name_input { font-size: 14px; width: 300px; font-family:Arial, Helvetica, sans-serif; margin:0; } .map_menubar { font-size: 90%; display: inline; width: 200px; } .map_mapmenu { height: 33px; font-size: 90%; z-index: 5000; } .map_savemapinit { float: left; } .map_gotocenter { float: left; } .map_mapinitview { float: left; } .map_resizing { float: right; color:#727272; font-size:12px; } .map_resizing_label { float: right; color:#727272; font-size:15px; } .geo_resize_hor { float: left; margin-left: 4px; } .geo_resize_ver { float: left; margin-left: 4px; } .map_sidepan { float: left; width: 200px; margin-left:15px; } .side_info { } .map_sidedescs { width: 200px; margin-top: -1px; overflow: auto; overflow-y: auto; overflow-x: hidden; } .map_mappart { margin-top: 0px; float: right; width: 802px; height: 535px; position:relative; margin-right:15px; } .map_mapcanvas { width: 100%; height: 500px; border: 1px solid #4f5253; overflow:hidden; } .search_results { overflow: false; /* width: 200px; */ } .search_results_limit { overflow: false; width: 200; height: 200; } .search_res_cc_header { width: 25px; } .search_res_cc_header_inner { float: left; margin-left: 10px; } .search_res_city_header { width: 95px; } .search_res_city_column { word-wrap: break-word; width: 95px; } .geores_cc_icon { float: left; } .geores_cc_text { margin-top: 1px; font-weight: bold; font-size: 13px; color:#007fb3; } .geores_city_text { margin-left: 6px; margin-top: 2px; font-weight: bold; font-size: 12px; color:#007fb3; } .geores_city_text:hover { text-decoration:underline; } /* .hidden { display: none; } */ .map_geo_search { margin-left: 2px; } .map_geo_ccselect { } .map_geo_cityname { width: 200; border: 1px solid #e0e0d0; } a.map-no-link { cursor: pointer; text-decoration: none; color: #000000; } .map_poi_side_list { } .poi_std { } .map_poi_side_one { } .map_mapedit { width: 615px; height: 405px; position: absolute; top: 93px; right: 90px; color: #804000; font-size: 11px; z-index: 10000; vertical-align: middle; text-align: center; } .map_editinner { background-color: #9d9d9d; width: 610px; position: relative; top: 10; left: 10; } .map_editpart1 { text-align: left; } .map_editactions { text-align: right; position: relative; top: 13; right: 10; font-size: 12px; font-weight: bold; } .popup_preview { width: 500px; height: 160px; overflow: auto; } .edit_popup_preview { background: #ffffff; } .poi_video_type_selection { margin: 0px; } .poi_image_type_placehold { margin-top: 4px; margin-bottom: 4px; } .geonames_result_table { } /* point edit forms */ .edit_tabs { padding:25px 10px 10px 10px; height:290px; } .edit_tabs ol { padding:0; margin:0; list-style: none; } .edit_tabs li { float: left; clear: left; width: 500px; font-size:12px; padding-bottom: 1em; font-size: 1em; line-height: 140%; position: relative; width:99%; margin:0; } .edit_marker_selected { padding: 2px 10px 5px 0; color: #696969; display: block; font-size: 12px; font-weight: bold; line-height: 20px; float: left; } label.block-label { clear: left; color: #696969; display: block; float: none; font-size: 12px; font-weight: bold; line-height: 20px; margin: 0; padding: 0 0 2px; text-indent: 1px; } .edit_tabs.submit { float: none; width: auto; border: 0 none #FFF; padding-left: 20px; border-style: none; background-color: transparent; background-image: none; } .edit_label { float: left; width: 10em; margin-right: 1em; color: #666666; float: left; font-size: 12px; font-weight: bold; padding: 2px 0 0; } a.edit_label_link { color: #666666; } .edit_label_long { float: left; width: 85%; margin-right: 1em; color: #999999; float: left; font-size: 12px; font-weight: bold; padding: 2px 0 0; } /* ie fixes, include as: legend { position: relative; left: -7px; top: -0.75em; } fieldset ol { padding-top: 0.25em; } fieldset { position: relative; } */ .map_realsize { background-color: transparent; background-color: #8080ff; border: 1px solid #8080ff; position: absolute; z-index: 1000; } .part_top { height: 0; width: 600; top: 70px; right: 105px; } .part_bottom { height: 0; width: 600; top: 470px; right: 105px; } .part_right { height: 400; width: 0; top: 70px; right: 105px; } .part_left { height: 400; width: 0; top: 70px; right: 705px; } .poi_actions_all { } .poi_actions { margin: 0 0 2px 0; } .poi_removal { margin-left: 0px; } .list_change_poi_void { } .action_disabled { color: #808080; font-style: italic; } .poi_coors_all { border:1px solid #ccc; padding:7px 10px 5px 10px; margin-bottom:8px; } .poi_coors { padding:4px 0 5px; color:#666666; font-size:12px; font-weight:bold; } .poi_coors label{ padding:2px 0 0px; float:left; width:44%; color:#666666; font-size:12px; font-weight:bold; } .poi_coors_input { border: 1px solid #9d9d9d; background: url(images/input_bg.png) repeat-x scroll 0 0 #FFFFFF; margin: 0 0 0 0; font-size:12px; padding:2px 0 2px 2px; float:left; width:52%; } .map_save_part { margin-left: 2px; margin-top: 2px; margin-bottom: 4px; height: 24px; font-size: 18px; } .map_save_off { background-color: #a0a0a0; } a.map_save_off { float: left; color: #a0a0a0; } .map_save_on { background-color: #fffff8; } a.map_save_on { float: left; color: #6000f0; } .map_save_info { float: left; color: #444; font-size: 16px; margin-top: 2px; } .edit_marker_selected_src { float: left; } .edit_marker_icons_all { width: 90%; } .edit_marker_choices { overflow: auto; height:170px; width: 500px; padding:10px; border:1px solid #CCC; } .edit_marker_one_choice { border: 1px solid #fff; margin: 4px 4px 1px 1px; padding:3px; } .edit_marker_one_choice:hover { border: 1px solid #007FB3; } a.edit_marker_one_choice_link { border-width: 0px; } .no_city_found { text-align: center; font-size: 12px; } .map_hidden { display: none; } .map_shown { display: default; } .edit_tabs input.input_text { background: url(images/input_bg.png) repeat-x scroll 0 0 #FFFFFF; border: 1px solid #9D9D9D; float: left; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; vertical-align: middle; width: 200px; } .edit_tabs .input_select { background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 25px; margin: 0; padding: 2px 2px 2px 0; vertical-align: top; } .map_mapedit fieldset li { font-size: 1em; line-height: 140%; position: relative; margin:0; } .map_poi_edit_intro, .map_poi_edit_intro_icon, .map_poi_edit_intro_sub, .map_mapedit fieldset li.map_poi_edit_intro_sub { margin-bottom: 20px; font-size:15px; font-weight:normal; } .map_poi_edit_intro_popup { margin-left: 30px; margin-bottom: 5px; } .map_poi_edit_intro_sub, .map_mapedit fieldset li.map_poi_edit_intro_sub { margin-top: 0px; margin-bottom: 0; } .map_search_label { font-size: 12px; } .map_button_edit_on_click { color:#666666; margin-right: 20px; font-size: 14px; float: right; } .geo_edit_textarea_text { height: 80px; } .geo_edit_textarea_perex { height: 32px; } .map_geo_showhide { margin-left: 0px; margin-right: 13px; float: right; } .geo_edit_popup_top { text-align: right; padding: 0 10px 0 0; } .geo_close_edit_window { position:absolute; top:16px; right:16px; z-index:3000; } .geo_preview_edit_window { position:absolute; top:16px; right:42px; z-index:3000;" } .save_empty_dialog { z-index:10000; } .map_text_lack { background: #ffebeb; /* width: 90%;*/ } .dataTables_scrollBody { border:none; } .geonames_result_table { font-size:12px; background:#fff; } .geonames_result_table th, .geonames_result_table td { padding:3px 0 3px; } .geonames_result_table td { padding:3px 0 3px; border-bottom:1px solid #ebebeb; } .geonames_result_table tr:last-child td { border-bottom:none; } .geonames_result_table th.ui-state-default { border-width: 0 0 1px 0; } .search_res_city_column { border-left:1px solid #ebebeb; } .geonames_result_table th.search_res_city_header { border-left:1px solid #ebebeb; } .inline_editable { background-image:url(images/icon_edit_l.png); background-repeat:no-repeat; background-position:4px 2px; padding:0 4px 0 22px; } .map_save_info input[type="text"] { border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; font-family: Arial,Helvetica,sans-serif; font-size: 16px; height: 23px; margin: -2px 0 0 0; padding: 0; text-indent: 3px; } .map_save_info input[type="text"]:focus { border: 1px solid #00B5F1; } .toggle_link { color: #696969; font-size: 12px; line-height: 140%; margin-bottom:6px; } .toggle_link:hover { color: #007FB3; } .toggle_link_block { display:block; } .toggle_link .ui-icon, legend .ui-icon { float: left; } .poi_actions_all fieldset { margin:0; padding:8px; } .poi_actions_all fieldset.closed { padding-left:9px; } fieldset .poi_coors_all { border: none; margin-bottom: 0; padding: 0; } .ui-accordion-icons .ui-accordion-header a.corner-button { padding: 4px; display: block; text-decoration: none; top: 0; } .ui-accordion-icons .ui-accordion-header a.corner-button .ui-icon { left: 0.4em; } .ui-state-hover .corner-button .ui-icon-closethick { background-image: url(images/ui-icons_ffffff_256x240.png); } .ui-state-hover .corner-button:hover .ui-icon-closethick { background-image: url(images/ui-icons_d00000_256x240.png); } .geo_edit_popup_top .icon-link { margin-left:6px; } .map_editinner input[type="text"] { border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; color:#444; width:180px; } .map_editinner input[type="text"]:focus { border: 1px solid #00B5F1; } .map_editinner select { background-color: #FFFFFF; border: 1px solid #9D9D9D; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 25px; margin: 0; padding: 2px 2px 2px 0; vertical-align: top; } .map_editinner textarea { border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; color: #444444; font-family: Arial,Helvetica,sans-serif; font-size: 14px; margin: 0; padding: 0 0 0 3px; } .map_editinner select#point_predefined { margin-bottom:6px; } .geo_video_desc, geo_image_desc { font-size:11px; font-weight:normal; font-style:italic; padding: 0 0 0 6px; color:#999999; } .poi_edit_description { color: #999999; float: left; font-size: 11px; font-style: italic; font-weight: normal; left: 325px; line-height: 14px; position: absolute; top: 0; width: 230px; } .ui-state-active .corner-button .ui-icon-closethick { background-image: url(images/ui-icons_808080_256x240.png); } .inline_link_like { cursor: pointer; color: #007FB3; } .poi_image_edit_link_desc { float: left; color: #888888; margin-left: 330px; margin-top: 40px; position: absolute; font-size: 12px; font-weight: normal; font-style: normal; width: 230px; } .poi_video_edit_link_desc { float: left; color: #888888; margin-left: 325px; margin-top: 76px; position: absolute; font-size: 12px; font-weight: normal; font-style: normal; width: 230px; } #geolocation .dataTables_wrapper { margin: 0 0 8px; border:1px solid #9D9D9D; border-width: 1px; } ================================================ FILE: newscoop/admin-style/map-preview.css ================================================ .map_preview_toolbar { background: #ffffff; /*width: 1020px;*/ margin: 0px auto; height: 0px; padding: 9px 8px 0px 14px; } .map_preview_info { margin-left: 2px; margin-top: 2px; margin-bottom: 4px; height: 24px; font-size: 18px; } .geomap_locations { float: left; width: 230px; /*margin-left: 20px;*/ font-size: 12px; } .geomap_mappart {} .geomap_container { /*width: 850px;*/ height: 500px; margin-left: 16px; /*margin-right: auto;*/ } .map_hidden { display: none; } .geomap_menu { font-size: 12px; height: 33px; z-index: 5000; } .geomap_map { float:left; } .geomap_locations dl { display:block; margin:0; padding:0; clear:left; font-size:14px; width:100%; } .geomap_locations dt { clear: left; color: #666666; float: left; font-weight: bold; margin: 0; padding: 4px 0; text-align: left; } .geomap_locations dd { float: left; margin: 0; padding: 4px 0 4px 15px; } .geomap_poi_icon_link { } .geomap_poi_icon_link img { float:left; margin-right:8px; } .geomap_info { margin-bottom:20px; min-height: 25px; } .geomap_poi_name { font-size:13px; font-weight:bold; } .geomap_poi_name:hover, .geomap_poi_center a:hover { text-decoration:underline; } ================================================ FILE: newscoop/admin-style/misc-pages.css ================================================ @charset "utf-8"; /* CSS Document */ .metadata { margin:26px 0 0 40px; padding:0; font-size:1.2em; border-top:1px dotted #b2b2b2; width:300px; float:left; } .metadata dt { clear: left; color: #666666; float: left; font-weight: bold; margin: 0 5px 0 0; min-width: 120px; padding: 4px 0 4px 5px; text-align: left; } .metadata dd { margin: 0; padding: 4px 0 4px 0; border-bottom:1px dotted #b2b2b2; } .metadata dt, .metadata dd { } .help { width:580px; margin:30px 0 30px 75px; padding:0 0 0 20px; font-family:Georgia, "Times New Roman", Times, serif; font-weight:bold; font-size:16px; } .help li { display:list-item; margin-bottom:10px; color: #007FB3; } .help li p { font-size:13px; color:#444; margin:0; font-family:Arial, Helvetica, sans-serif; font-weight:normal; line-height:140%; } .help li h3 { font-size:14px; font-weight:bold; color:#444; margin:0; display:inline-block; padding:0; font-family:Arial, Helvetica, sans-serif; } .help li a:hover { text-decoration:underline; } ================================================ FILE: newscoop/admin-style/modal-custom.css ================================================ /* Modal Bootstrap custom classes */ .modal.renditionsModal { position: fixed; width: auto; height: auto; margin: 0 10px 10px; left: 0!important; top: 0!important; right: 0!important; bottom: 0!important; padding: 0!important; overflow: hidden!important; border-radius: 0 0 6px 6px; } .modal.renditionsModal .modal-dialog { width: auto; height: 100%; margin: 0; padding-top: 10px; } .modal.renditionsModal .modal-dialog .modal-content { height:100%; border: 1px solid #222; } .modal.renditionsModal .modal-dialog .modal-content .modal-body { position: initial; height: 100%; } .modal.renditionsModal .modal-dialog .modal-content .modal-header { min-height: 1px; background: none; padding: 0; border-bottom: none; } .modal.renditionsModal .modal-dialog .close { position: absolute; top: 8px; right: 8px; z-index: 10000; opacity: .4; padding: 5px; width: 30px; height: 30px; } .modal.renditionsModal iframe { border: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; border-radius: 6px; } .modal-backdrop.in { opacity: 0.8; } ================================================ FILE: newscoop/admin-style/modal-window.css ================================================ @charset "utf-8"; /* CSS Document */ html { height:100%; } body.modal-window { background:#f5f5f5; position:relative; margin:0; padding: 45px 1px 10px 1px; box-shadow:0 0 0 1px #ccc inset; font-family:Arial, Helvetica, sans-serif; } .modal-window header { position:fixed; top:0; left:0; right:0; height: 35px; padding: 9px 12px 0 12px; background:#FFF; z-index:1000; border-bottom:1px solid #cccccc; box-shadow:0 1px 3px rgba(0, 0, 0, 0.1); } .modal-window header button, .modal-window header input[type="submit"],.modal-window header .prime { float:right; margin:0 0 0 6px; } .modal-window header h1 { float:left; margin:0; font-size:20px; font-weight:normal; font-family:Arial, Helvetica, sans-serif; } .modal-window nav { background: #efefef; border-bottom: 1px solid #e5e5e5; box-shadow:0 1px 0 rgba(255, 255, 255, 1); padding:6px 10px 0 10px; min-height:30px; } .modal-window nav.top-fixed { position:fixed; top:45px; left:1px; right:1px; z-index:999; } .modal-window nav.top-fixed + section { margin-top:40px; } #app { padding: 0; } ================================================ FILE: newscoop/admin-style/multidate.css ================================================ @CHARSET "UTF-8"; body { font-size: 12px; color: #696969; } #multidate-box { background: none repeat scroll 0 0 #FFFFFF; height: 660px; margin: 0 auto; padding: 10px; width: 952px; font-family: Arial,Helvetica,sans-serif; font-size: 12px; /* color: #444444; */ } #multidate-box .toolbar { background: none repeat scroll 0 0 transparent; border: medium none; box-shadow: none; min-height: 35px; padding: 6px 4px; } .dates { width: 285px; height: 100%; /* border-right: 1px solid #CCCCCC; */ float: left; } #full-calendar { width: 630px; height: 100px; float: left; margin-left:17px; margin-top:17px; } .multidate-input { /* border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; */ background-color: #FFFFFF; border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; color: #333333; font-family: Arial,Helvetica,sans-serif; font-size: 12px; height: 23px; margin: 0; padding: 0; text-indent: 3px; } .date-mode-switcher { width:260px; margin-left:12px; margin-top: 20px; border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; height: 23px; } .date-switch { border: 1px solid #9D9D9D; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; width: 128px; margin-top: 20px; text-align:center; float:left; height: 18px; cursor: pointer; padding-top:5px; } .border-left { border-left: 1px solid #9D9D9D; width: 131px!important; } .radio-specific { width:100%; } .multidate-select { margin: 0; padding: 3px 5px; border: 1px solid #9d9d9d; } .specific-radio-holder, .repeats-checkbox-holder{ margin-left:12px; margin-top:8px; } .switch-active { color: #FFFFFF; background: none repeat scroll 0 0 #444444; } .form-action-holder { margin-left:12px; margin-top:8px; } input[type="text"].date-input { background-image:url(images/input_with_calendar_bg.png); background-repeat:no-repeat; background-position:right 0; } input[type="text"].time-input { background-image:url(images/input_with_time_bg.png); background-repeat:no-repeat; background-position:right 0; } input[type="text"].search, input[type="text"].search-input { background-image:url(images/input_with_search_bg.png); background-repeat:no-repeat; background-position:0 0; text-indent:23px; } .multi-box { /* background: #f5f5f5; */ background:#f5f5f5 url(images/multi-date_bg.png) repeat-y 0 0; border: 1px solid #ccc; overflow:hidden; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1) inset; height:610px; } .multi-box2 { background:#f5f5f5 url(images/multi-date_bg.png) repeat-y 0 0; } .remove-link { text-decoration: underline; margin-left:12px; margin-top:12px; } ================================================ FILE: newscoop/admin-style/pagination.css ================================================ @charset "utf-8"; /* CSS Document */ dl.slideshow-preview figure > div > * { border: 1px solid #BABDB6; display: block; } /* Pagination //////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////*/ .paginationControl { color: rgba(255, 255, 255, 0); font-size:1px; } .paginationControl span, .paginationControl a { border: 1px solid #9D9D9D; color: #3B3B3B; display: inline-block; font-size: 12px; padding: 3px 12px; font-size:12px; line-height: 17px; } .paginationControl a { background: -moz-linear-gradient(center top , #FAFAFA 0%, #F6F6F6 100%); background: linear-gradient(top, #FAFAFA 0%, #F6F6F6 100%); background: -webkit-linear-gradient(top, #FAFAFA 0%, #F6F6F6 100%); text-decoration:none; } .paginationControl a:hover { background: -moz-linear-gradient(center top , #FAFAFA 0%, #eaeaea 100%); background: linear-gradient(top, #FAFAFA 0%, #eaeaea 100%); background: -webkit-linear-gradient(top, #FAFAFA 0%, #eaeaea 100%); border: 1px solid #818181; } .paginationControl span { border: 1px solid #E5E5E5; background: rgba(255, 255, 255, 0.5); color: #DBDBDB; } nav .paginationControl { float:left; } ================================================ FILE: newscoop/admin-style/renditions.css ================================================ #next.iframe { background-color: #f8f8f8; font-family: 'Roboto', Arial, Helvetica, sans-serif; } #next.iframe h1 { padding: 5px 12px; } #next.iframe h1 span { margin-top: -3px; } #modal-top .toolbar { padding: 7px 20px 8px 0px; min-height: initial; background: #fff; z-index: 100000; } #next.iframe h2 { background: #424242; background-image: -webkit-linear-gradient(top, #1a1a1a 0%, #333333 100%); background-image: -o-linear-gradient(top, #1a1a1a 0%, #333333 100%); background-image: linear-gradient(to bottom, #1a1a1a 0%, #333333 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1a1a', endColorstr='#ff333333', GradientType=0); color: white; font-size: 12px; font-weight: 400; text-transform: uppercase; margin: 0; padding: 11px 16px; border-top: 1px solid #000; border-bottom: 1px solid #3e3e3e; box-shadow: inset 0 6px 20px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.4); position: absolute; left: 0; right: 0; bottom: 174px; } #next.iframe .content { } #next .inline { margin: 0 0 0 10px; padding: 0px 26px; position: absolute; top: 8px; left: 140px; border-left: 1px solid #4d4d4d; } #next .inline button { background-image: -webkit-linear-gradient(top, #f6f5f6 0%, #e8e5e8 100%); background-image: -o-linear-gradient(top, #f6f5f6 0%, #e8e5e8 100%); background-image: linear-gradient(to bottom, #f6f5f6 0%, #e8e5e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff6f5f6', endColorstr='#ffe8e5e8', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border: 1px solid #cecece; text-shadow: 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #ffffff; -moz-box-shadow: inset 0 1px 0 #ffffff; box-shadow: inset 0 1px 0 #ffffff; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-size: 11px; text-transform: uppercase; padding: 3px 8px; } #next .inline button:hover { background-color: #e8e5e8; background-position: 0 -25px; } #next .inline button:active { background-color: #d9d5d9; border-color: #d4cfd4; background-image: none; box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } ul.thumbnails { background: #4d4d4d; padding: 4px 12px 0 12px; margin-bottom: 0; position: absolute; bottom: 0; left: 0; right: 0; height: 170px; overflow-y: auto; } ul.thumbnails li { padding: 10px 8px; border: 1px solid #000; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; box-shadow: 0 2px 0 rgba(0,0,0,1); width: 122px; } ul.thumbnails li:hover { box-shadow: 0 2px 0 rgba(0,0,0,1), 0 0 16px rgba(0,0,0,1); border: 1px solid #000; background: #fafafa; } ul.thumbnails img { border: none; } ul.thumbnails figure div { min-height: 105px; } ul.thumbnails figure label { font-size: 12px; } ul.renditions { background: #f8f8f8; padding: 5px 12px; box-shadow: none; position: absolute; top: 45px; bottom: 214px; left: 0; right: 0; overflow-y: auto; display: block; box-sizing: border-box; height: auto; border-top: 1px solid #ddd; } ul.renditions li { background: #fff; padding: 0; margin: 7px 6px; border: #d4d4d4 solid 1px; width: 168px; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; box-shadow: 0 2px 0 rgba(212,212,212,1); } ul.renditions li:hover { border: 1px solid #707070; box-shadow: 0 2px 0 rgba(112,112,112,1); } ul.renditions li dl.rendition .preview, ul.renditions li.state-active dl.rendition .preview { border: none; } ul.renditions li.active { background: #d9eaf9; } ul.renditions li.active dl.rendition dd { background: #cfe1f1; } ul.renditions li.active dl.rendition dd.name { border-top: 1px solid #c7dbeb; } ul.renditions li dl.rendition dt { padding: 8px; } ul.renditions li dl.rendition dd { margin: 0; padding: 0; background: #fafafa; } ul.renditions li dl.rendition dd.name { border-top: 1px solid #e6e6e6; color: #808080 !important; padding: 3px 0 0; } .renditions .reset { background: #007fb3; right: 10px; top: 8px; padding: 3px 5px; } .save-button { padding: 4px 12px; margin-right: 40px; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-size: 13px; background-image: -webkit-linear-gradient(top, #2591be 0%, #207da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#2591be), to(#207da4)); background-image: linear-gradient(to bottom, #2591be 0%, #207da4 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2591be', endColorstr='#ff207da4', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #1d7093; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 0 #ffffff, inset 0 1px 0 rgba(255, 255, 255, 0.3); box-shadow: 0 1px 0 #ffffff, inset 0 1px 0 rgba(255, 255, 255, 0.3); } .save-button:hover, #next button:hover { background-color: #207da4; background-position: 0 -25px; background-image: none; } .save-button:active, #next button:active { background-color: #1b6a8b; border-color: #196382; background-image: none; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } /* Editor classes */ .editor-wrapper { /*margin-top: 45px;*/ position: absolute; top: 45px; bottom: 6px; left: 0; right: 0; border-top: 1px solid #ddd; } ul.renditions.editor { background: #f5f5f5; box-shadow: none; top: 0; bottom: 0; left: 0; padding: 3px 0px 3px 6px; width: 475px; border: none; } ul.renditions.editor li { width: 136px; } ul.renditions.editor li dl.rendition dt { height: 122px; } #next .editarea h2 { background: #f8f8f8; background-image: none; color: #333; box-shadow: none; border: none; text-transform: none; font-size: 13px; top: 0; bottom: auto; padding: 6px 10px; } #next .editarea { background: #f8f8f8; box-shadow: none; position: absolute; left: 475px; right: 0; top: 0px; bottom: 0; border-left: 1px solid #DDD; overflow: auto; padding: 0 10px; } #next .editarea > div .save-button { top: 42px; } #next .editarea div#editor { display: block; padding: 10px 126px 10px 10px; background: #f8f8f8; box-shadow: none; min-height: 32px; border: 2px dashed #ccc; margin: 30px 0 5px 0; } /* Media query */ @media only screen and (max-width: 1290px) { ul.renditions.editor { width: 325px; } #next .editarea { left: 325px; } } @media only screen and (max-width: 1160px) { ul.renditions.editor { width: 175px; } #next .editarea { left: 175px; } } ================================================ FILE: newscoop/admin-style/sidebar.css ================================================ .sidebar h3.label { height: 33px; line-height: 33px; margin: 0; padding: 0 9px; font-size: 1.3em; color: #444; background-color: #fafafa; background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #f5f5f5)); border-bottom: 1px solid #ccc; } .sidebar .actions { height: 1%; overflow: hidden; margin: 8px 13px; font-size: 1.2em; } .sidebar .message { margin: 8px; padding: 0; border: none; -mozilla-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .sidebar > table { margin: 8px; } .sidebar .zend_form { margin: 0; padding: 8px; border: none; -mozilla-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } ================================================ FILE: newscoop/admin-style/slideshow-list.css ================================================ #article-slideshows.slideshow-list { margin-bottom:-8px; } #article-slideshows.slideshow-list li { margin-bottom:20px; } .slideshow-list img { display: block; border: none; } .slideshow-list small { color: #ccc; font-size: 11px; margin: -5px 0 5px; display: block; } .slideshow-list .title { margin: 0 0 5px; padding: 0; font-size: 13px; font-weight: normal; white-space: nowrap; overflow:hidden; text-overflow: ellipsis; } .slideshow-list .preview { height: 150px; width: 150px; overflow: hidden; } .slideshow-list .video { display: block; min-height: 100px; background: #797979 url(images/slideshow-preview-video.png) no-repeat 50% 50%; } #message { position: fixed; top: 0; left: 0; width: 100%; text-align: center; z-index: 1000; } #message > span { display: inline-block; margin: 0; padding: 3px 5px; color: #fff; background-color: #5c3566; font-size: 0.8em; } #slideshow-app { margin: 13px 13px 0; } #add-slideshow { } .dark { background:#d0d0d0; box-shadow: inset 0 -1px 1px rgba(0, 0, 0, 0.1); border-bottom:1px solid #b2b2b2; margin-bottom:-1px; } .slideshow-list .info { display: inline-block; min-height: 13px; margin-top: -10px; position: relative; top: 10px; font-size: 11px; font-style: italic; color: #7c7c7c; } ================================================ FILE: newscoop/admin-style/slideshow.css ================================================ #next.iframe { background-color: #fff; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-weight: 400 } #next.iframe h1 { padding: 5px 32px 5px 12px; background: transparent } #next.iframe h1 span { margin-top: -3px } #next.iframe h2 { background: #424242; background-image: -webkit-linear-gradient(top, #1a1a1a 0, #333 100%); background-image: -o-linear-gradient(top, #1a1a1a 0, #333 100%); background-image: linear-gradient(to bottom, #1a1a1a 0, #333 100%); background-repeat: repeat-x; filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1a1a', endColorstr='#ff333333', GradientType=0); color: white; font-size: 12px; font-weight: 400; text-transform: uppercase; margin: 0; padding: 9px 20px 8px 20px; border-top: 1px solid #000; border-bottom: 1px solid #3e3e3e; box-shadow: inset 0 6px 20px rgba(0, 0, 0, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.4); position: absolute; left: 0; right: 0 } #next.iframe h2.slideshow-images { top: 104px } #next.iframe h2.attached-slideshow { top: 49px } #next .inline { margin: 0 0 0 10px; padding: 0 26px; position: absolute; top: 8px; left: 140px; border-left: 1px solid #4d4d4d } #next .inline button { background-image: -webkit-linear-gradient(top, #f6f5f6 0, #e8e5e8 100%); background-image: -o-linear-gradient(top, #f6f5f6 0, #e8e5e8 100%); background-image: linear-gradient(to bottom, #f6f5f6 0, #e8e5e8 100%); filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#fff6f5f6', endColorstr='#ffe8e5e8', GradientType=0); filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); background-repeat: repeat-x; border: 1px solid #cecece; text-shadow: 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #fff; -moz-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-size: 11px; text-transform: uppercase; padding: 3px 8px } #next .inline button:hover { background-color: #e8e5e8; background-position: 0 -25px } #next .inline button:active { background-color: #d9d5d9; border-color: #d4cfd4; background-image: none; box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) } #next input[type="submit"] { padding: 5px 12px; margin-right: 40px; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-size: 12px; background-image: -webkit-linear-gradient(top, #2591be 0, #207da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#2591be), to(#207da4)); background-image: linear-gradient(to bottom, #2591be 0, #207da4 100%); filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ff2591be', endColorstr='#ff207da4', GradientType=0); filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); background-repeat: repeat-x; border-color: #1d7093; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 0 #fff, inset 0 1px 0 rgba(255, 255, 255, 0.3); box-shadow: 0 1px 0 #fff, inset 0 1px 0 rgba(255, 255, 255, 0.3); color: #fff } #next input[type=text] { font-family: 'Roboto', Arial, Helvetica, sans-serif; height: auto!important; width: 300px; padding: 6px 7px 6px 7px; border: 1px solid #ccc; margin: 0 6px 0 0; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: none; border-radius: 1px; background: #fff } #next input[type=text]:hover { border: 1px solid #bbb } #next input[type=text]:focus { border: #52a8ec solid 1px!important; outline: none!important } #next button { padding: 5px 12px; margin-right: 10px; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-size: 12px; background-image: -webkit-linear-gradient(top, #2591be 0, #207da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#2591be), to(#207da4)); background-image: linear-gradient(to bottom, #2591be 0, #207da4 100%); filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ff2591be', endColorstr='#ff207da4', GradientType=0); filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); background-repeat: repeat-x; border-color: #1d7093; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 0 #fff, inset 0 1px 0 rgba(255, 255, 255, 0.3); box-shadow: 0 1px 0 #fff, inset 0 1px 0 rgba(255, 255, 255, 0.3); color: #fff; line-height: 17px } #next button.button { background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f5f6), to(#e8e5e8)); background-image: linear-gradient(to bottom, #f6f5f6 0, #e8e5e8 100%); filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#fff6f5f6', endColorstr='#ffe8e5e8', GradientType=0); filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); background-repeat: repeat-x; border-color: #1d7093; text-shadow: 0 1px 0 #fff; border-color: #cecece; padding: 5px 12px; font-family: 'Roboto', Arial, Helvetica, sans-serif; color: #444 } #next button.button:hover, #next button.button:focus { background-image: none!important; background-color: #e8e5e8!important; background-position: 0 -25px!important; border-color: #adadad!important; text-shadow: 0 1px 0 #fff!important; color: #333!important } #next .expand-btn { position: absolute; top: auto; left: 0; right: 0; bottom: 0; padding: 10px 20px 10px 50px; font-size: 14px; font-weight: 500; background: #fff url(images/add-images-arrow.png) no-repeat 10px 0; cursor: pointer; color: #007fb3 } #next .expand-btn:hover { background-color: #f2f2f2 } #next .ui-tabs { margin: 0; position: absolute; top: auto; bottom: 0; background-color: #f8f8f8; left: 0; right: 0; overflow-y: auto; padding: 0; height: 37px; display: none; font-family: 'Roboto', Arial, sans-serif } #next .ui-tabs-nav { position: absolute; left: 0; top: 0; bottom: 0; width: 150px; box-sizing: border-box; margin: 0; padding: 30px 0 0; border-width: 0 1px 0 0; border-style: solid; border-color: #d2d2d2; background: #FFF } #next .ui-tabs-nav li { float: none; margin: 0; padding: 0; border: 0; background: #fff; top: 0 } #next .ui-tabs-nav li a { font-size: 12px; float: none; margin: 0; padding: 0; display: block; font-weight: normal; padding: 10px 15px; color: #007fb3; border-style: solid; border-width: 1px 0 1px 0; border-color: #fff } #next .ui-tabs-nav li.ui-state-active a { background: #f8f8f8; border-color: #d2d2d2; margin-right: -1px; color: #333 } #next .ui-tabs .ui-tabs-panel { position: absolute; left: 150px; right: 0; top: 0; bottom: 0; border: 0; overflow-y: auto; box-sizing: border-box; padding: 10px 20px } #next .ui-tabs .ui-tabs-panel ul.thumbnails { margin: 0 0 20px 0; padding: 0 } #next .ui-tabs .ui-tabs-panel ul.thumbnails li { width: 150px; position: relative; margin: 7px 4px; padding: 10px; background-color: white; border-width: 1px; border-style: solid; border-color: #d4d4d4; border-radius: 2px; -webkit-box-shadow: 0 2px 0 #d4d4d4; box-shadow: 0 2px 0 #d4d4d4 } #next .ui-tabs .ui-tabs-panel ul.thumbnails li:hover { border-color: #707070; -webkit-box-shadow: 0 2px 0 #707070, 0 0 6px rgba(0, 0, 0, 0.15); box-shadow: 0 2px 0 #707070, 0 0 6px rgba(0, 0, 0, 0.15) } #next .ui-tabs .ui-tabs-panel ul.thumbnails li figure div { min-height: 106px } #next .ui-tabs .ui-tabs-panel ul.thumbnails li figure div img { border: 0; max-height: 100px; max-width: 150px } #next .ui-tabs .ui-tabs-panel ul.thumbnails li figure input { margin: 4px 0 } #next .ui-tabs .ui-tabs-panel ul.thumbnails li figure figcaption label { font-size: 11px } #next .ui-tabs .ui-tabs-panel .add-images { margin-left: 4px; margin-bottom: 20px } #next ul.slideshow { padding: 5px 12px 10px 12px; box-shadow: none; display: block; box-sizing: border-box; background: #4d4d4d; height: auto; overflow-y: scroll; position: absolute; top: 137px; left: 0; right: 0; bottom: 37px } #next ul.slideshow li { padding: 10px; border: 1px solid #000; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; box-shadow: 0 2px 0 #000; width: 150px; background: #fff; margin: 7px 4px } #next ul.slideshow li:hover { box-shadow: 0 2px 0 #000, 0 0 16px #000; border: 1px solid #000; background: #fafafa url(images/slideshow-item-drag.png) repeat-y 0 0 } #next ul.slideshow li:hover a.remove { display: block } #next ul.slideshow li.placeholder, #next ul.slideshow li.placeholder:hover { width: 172px; height: 181px; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; background-image: none; background: transparent; box-shadow: none; border: 2px dashed #767676 } #next ul.slideshow li a.remove { background: #fafafa url(images/slide_delete.png) no-repeat 1px 0; right: 10px; top: 10px; width: 20px; height: 20px; display: none } #next ul.slideshow li a.remove:hover { background-position: 1px -30px } #next ul.slideshow figure { min-height: 159px } #next ul.slideshow figure>div { height: auto } #next ul.slideshow figure>div .rendition-preview { border: 0 } #next ul.slideshow figure>div .rendition-preview img { max-height: 100px; max-width: 150px } #next ul.slideshow a figcaption { margin: 10px 0 0; padding: 0; height: 49; overflow: hidden } #next ul.slideshow.editor { background: #f5f5f5; box-shadow: none; top: 0; bottom: 0; left: 0; padding: 3px 0 3px 6px; width: 325px; border: 0; overflow-y: auto } #next ul.slideshow.editor li { background: #fff; width: 120px; padding: 8px; margin: 7px 6px; border: #d4d4d4 solid 1px; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; box-shadow: 0 2px 0 #d4d4d4 } #next ul.slideshow.editor li:hover { border: 1px solid #707070; box-shadow: 0 2px 0 #707070 } #next ul.slideshow.editor li a.remove { display: none } #next ul.slideshow.editor li.active { background: #d9eaf9; border: #007fb3 solid 1px!important; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25) } #next ul.slideshow.editor li.active a.remove { background-color: #d9eaf9 } #next ul.slideshow.editor figure { min-height: 145px } #next ul.slideshow.editor figure>div .rendition-preview img { max-height: 80px; max-width: 120px } #next ul.slideshow.editor figure figcaption { height: auto; max-height: 52px } #next ul.slideshow.attached { top: 74px; height: 200px!important } #next ul.slideshow.attached li { padding: 10px; border: 1px solid #000; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; box-shadow: 0 2px 0 #000; width: 150px; background: #fff; margin: 7px 4px; height: 145px } #next ul.slideshow.attached li:hover { background-image: none; box-shadow: 0 2px 0 #c83929; border: 1px solid #c83929; cursor: pointer } #next ul.slideshow.attached li h3 { padding: 0; font-size: 13px; font-weight: normal; white-space: nowrap; overflow: hidden; text-overflow: ellipsis } #next ul.slideshow.attached li .preview { margin: 4px 0 0; height: 100px } #next ul.slideshow.attached li .preview img { max-height: 100px; max-width: 150px } #next ul.slideshow.attached li .info { min-height: 13px; position: absolute; bottom: 2px; font-size: 11px; font-style: normal; font-weight: 500; color: #c83929; text-transform: uppercase } #next ul.slideshow.attached li small { font-size: 11px; color: #888 } #next ul.slideshow-list { position: absolute; top: 327px; bottom: 0; left: 0; right: 0; overflow-y: auto; background: #f8f8f8; border-top: 1px solid #e2e2e2; padding: 10px 12px } #next ul.slideshow-list li { width: 150px; position: relative; margin: 7px 4px; padding: 10px; background-color: white; border-width: 1px; border-style: solid; border-color: #d4d4d4; border-radius: 2px; -webkit-box-shadow: 0 2px 0 #d4d4d4; box-shadow: 0 2px 0 #d4d4d4; height: 145px; min-height: inherit } #next ul.slideshow-list li:hover { border-color: #7aa03f; -webkit-box-shadow: 0 2px 0 #7aa03f, 0 0 6px rgba(0, 0, 0, 0.15); box-shadow: 0 2px 0 #7aa03f, 0 0 6px rgba(0, 0, 0, 0.15); cursor: pointer } #next ul.slideshow-list li .preview { height: 100px; margin-top: 4px } #next ul.slideshow-list li .preview img { max-width: 150px; max-height: 100px } #next ul.slideshow-list li small { font-size: 11px; color: #888 } #next ul.slideshow-list li .info { min-height: 13px; position: relative; font-size: 11px; font-style: normal; font-weight: 500; color: #7aa03f; text-transform: uppercase; position: absolute; top: auto; bottom: 2px; margin-top: 0 } #next.expanded .expand-btn { top: 364px; left: 0; right: 0; bottom: auto; background-position: 10px -35px } #next.expanded .ui-tabs { top: 400px; height: auto; display: block } #next.expanded ul.slideshow { height: 228px; bottom: auto } #next #image-search { margin: 7px 4px 0 4px } #next #image-search input, #next #image-search button { vertical-align: middle } #next #image-search button { padding: 5px 12px; font-size: 12px!important } #next .editarea { background: #f8f8f8; box-shadow: none; position: absolute; left: 325px; right: 0; top: 0; bottom: 0; border-left: 1px solid #DDD; overflow: auto; padding: 12px 10px } #next .editarea div#editor { padding: 10px 126px 6px 6px; background: #f8f8f8; box-shadow: none; min-height: 32px; border: 2px dashed #ccc; margin: 30px 0 5px 0 } #next .editarea div>.save-button { top: 41px; right: 0; padding: 3px 5px } #next .editarea h2 { background: #f8f8f8; background-image: none; color: #333; box-shadow: none; border: 0; text-transform: none; font-size: 13px; top: 0; bottom: auto; padding: 6px 10px } #modal-top .toolbar { padding: 10px 20px 8px 0; min-height: initial; background: #fff; z-index: 1049; } .slideshow-headline { position: fixed; top: 50px; left: 0; right: 0; padding: 12px 20px 13px 20px; border-top: 1px solid #e2e2e2; background-color: #f2f2f2 } .slideshow-headline input, .slideshow-headline button { vertical-align: middle } .slideshow-headline select { padding: 6px 7px 5px 7px; border: 1px solid #ccc; vertical-align: middle } .slideshow-headline select:hover { border: 1px solid #bbb } .slideshow-headline select:focus { border: #52a8ec solid 1px!important; outline: none!important } .add-video { margin: 7px 0 0; padding: 0 4px } .add-video input, .add-video button { vertical-align: middle } .save-button { padding: 4px 12px; margin-right: 40px; font-family: 'Roboto', Arial, Helvetica, sans-serif; font-size: 12px; background-image: -webkit-linear-gradient(top, #2591be 0, #207da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#2591be), to(#207da4)); background-image: linear-gradient(to bottom, #2591be 0, #207da4 100%); filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ff2591be', endColorstr='#ff207da4', GradientType=0); filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); background-repeat: repeat-x; border-color: #1d7093; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 1px 0 #fff, inset 0 1px 0 rgba(255, 255, 255, 0.3); box-shadow: 0 1px 0 #fff, inset 0 1px 0 rgba(255, 255, 255, 0.3) } .save-button:hover, #next button:hover { background-color: #207da4; background-position: 0 -25px; background-image: none } .save-button:active, #next button:active { background-color: #1b6a8b; border-color: #196382; background-image: none; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) } #image-archive .paginationControl { padding: 4px; margin-bottom: 20px } #image-archive .paginationControl a, #image-archive .paginationControl span { border: 1px solid #dedede; background: -webkit-linear-gradient(#fafafa 0, #f6f6f6 100%); background: -o-linear-gradient(#fafafa 0, #f6f6f6 100%); background: linear-gradient(#fafafa 0, #f6f6f6 100%); border-radius: 1px; padding: 5px 12px } #image-archive .paginationControl a { border: 1px solid #cecece } #image-archive .paginationControl a:hover { border: 1px solid #aaa; background: -webkit-linear-gradient(#fafafa 0, #eaeaea 100%); background: -o-linear-gradient(#fafafa 0, #eaeaea 100%); background: linear-gradient(#fafafa 0, #eaeaea 100%) } .editor-wrapper { position: absolute; top: 50px; bottom: 6px; left: 0; right: 0; border-top: 1px solid #ddd } .search-wrapper { position: absolute; top: 282px; left: 0; right: 0; padding: 8px 16px; background: #eee } .search-wrapper input[type="text"] { vertical-align: middle } .search-wrapper button { vertical-align: middle } .search-wrapper .search { float: left } .search-wrapper .paginationControl { float: right; margin-right: 12px } .search-wrapper .paginationControl a { padding: 5px 12px; border: 1px solid #cecece; margin-left: 4px } .search-wrapper .paginationControl a:hover { border: 1px solid #aaa } .search-wrapper .paginationControl span { padding: 5px 12px; margin-left: 4px } @media only screen and (max-width: 1290px) { #next ul.slideshow.editor { width: 325px } #next .editarea { left: 325px } } @media only screen and (max-width: 1160px) { #next ul.slideshow.editor { width: 175px } #next .editarea { left: 175px } } .btn-disabled { cursor: not-allowed !important; filter: alpha(opacity=55); -webkit-box-shadow: none; box-shadow: none !important; opacity: .55; } ================================================ FILE: newscoop/admin-style/table.css ================================================ table { margin: 0 0 1em; font-size: 1.2em; border: 1px solid #ccc; background-color: #fff; border-collapse: collapse; } table caption { text-align: left; margin: 1px; padding: 5px 8px; background-color: #fff; } table tr > * { width: 13em; margin: 0; padding: 3px 5px; background-color: #f6f6f6; border: 1px solid #ebebeb; border-width: 1px 0 0 1px; } table .text { width: 21em; } table tr > th { border-top-color: #ccc; } table tr > *:first-child { border-left: none; } table tr.odd td { background-color: #fff; } table tr:hover td { background-color: #cce5f0; } .content .dataTables_wrapper { margin-left: 0; margin-right: 0; } .content table.data { margin-bottom: 0; } table .id { width: 1em; } table td.size { text-align: right; } .tabs table.templates { font-size: 1em; } table.datatable { margin-bottom: 0; } ================================================ FILE: newscoop/admin-style/themes_list.css ================================================ .themesListHolder { background:none !important; border:none !important; } .themesListHolder td{ vertical-align: top; } .themesListHolder div { position:relative; padding:0px !important; background:none !important; border:none !important; } .themesListTabsBtns { padding:0px !important; margin-bottom:0px !important; border:none !important; } .themesListTabsBtns .ui-tabs-selected { background:#fff !important; } .themesListHolder .dataTables_wrapper { margin-top: 0; } #addNewPublication { position:absolute; right:0px; top:8px; display:block; height:13px; padding-left:14px; color:#007FB3; background:url(images/small_add.png) 0 3px no-repeat; } #addNewPublication:hover { text-decoration:underline; } #actionExpand { overflow: hidden; margin-bottom: 8px; } #actionExpand fieldset { float: left; width: auto; margin: 0px; padding: 0px; border: none; } #actionExpand fieldset.right { float: right; } select.actions { width: 100px; margin-right: 10px; } #actionExpand fieldset a { line-height: 24px; color: #007FB3; } #actionExpand fieldset a:hover { text-decoration: underline; } #actionExpand fieldset label { margin-right: 10px; line-height: 24px; } .themesListHolder table { } .themesListHolder table thead tr th { text-align:left; } .themesListHolder table tbody { background:#ffffff; } .themesListHolder table tbody tr:hover td { background:none !Important; } .themesListHolder table tbody tr td { padding:10px 5px; border:none; border-top:1px solid #cccccc; } .themesListHolder table tbody tr td.valignTop { vertical-align:top; } .themesListTabs { position:relative; overflow:hidden; } .ui-tabs .ui-tabs-hide { display: none; } .themesListTabs div, .themesListTabs li { float:left !important; overflow:hidden; width:210px !important; height:129px !important; margin-right:16px; border:1px solid #9d9d9d !important; } .themesListTabs div, .themesListTabs li img { width: 100% } .themesListTabs .imageCtrls ul, .themesListTabs .imageCtrls li { width: 100% !important; } .themesListTabs ul { width: 100% !important; border: none !important; } .themesListTabs h3 { padding-bottom:0; color:#3399c2; } .themesListTabs h3 span { font-size:14px; color:#3b3b3b; } .themesListTabs p { margin:0px 0 15px 0; } .themesListTabs ul { right:0px; bottom:0px; margin:0px !important; padding:0px !important; width:236px; !Important; background:none !important; border:none !important; } .themesListTabs ul li { float:none !important; height:25px !important; margin:0px !Important; padding:0px !important; background:none !Important; border:none !important; } .themesListTabs ul li a { display:block; position:relative; width:95%; height:26px; padding:0px 0 0 20px !important; line-height:26px; background: #ff2200; background:url(images/themes-list-tabs-btn.png) left top no-repeat; background-size: 100% 53px; } .themesListTabs ul li.ui-tabs-selected a { background-position:0 -26px; cursor:pointer !important; } .themesListTabs ul li a span { position:absolute; right:10px; top:0px; display:none; font-weight:normal; color:#9d9d9d; font-style:italic; font-size:11px; } .themesListTabs ul li.ui-tabs-selected a span { display:block; } .compatibilityTitle { display:block; margin-bottom:5px; color:#000000; } .actionDropDown { float:left; margin:0px !important; padding:10px 0 0 0px !important; } .actionDropDown li { position:relative; float:right; } .actionDropDown li a { display:block; width:105%; height:18px; padding-left:8px; line-height:18px; color:#007fb3; background:url(images/actions-btn-bgr.png) 100% 0px no-repeat; -moz-border-radius: 3px; -webkit-border-radius: 3px; } .actionDropDown li a:hover, .actionDropDown li a.active { color:#ffffff; background-position:100% -18px; background-color:#9d9d9d; } .actionDropDown li ul { display:none; position:absolute; top:15px; left:0px; width:160px; margin:0px !important; padding:0px !important; border:1px solid #9d9d9d; } .actionDropDown li ul li { border-bottom:1px solid #e5e5e5; } .actionDropDown li ul li a, .actionDropDown li ul li a.active { width:135px; height:auto; min-height:25px; padding:0 0 0 25px; line-height:25px; color:#444444; background-color:#ffffff; } .actionDropDown li ul li a.add { background:url(images/solo_icons.png) 7px -84px no-repeat #ffffff; } .actionDropDown li ul li a.edit { background:url(images/topics_edit.png) 5px 6px no-repeat #ffffff; } .actionDropDown li ul li a.delete, .actionDropDown li ul li a.unassign { background:url(images/topics_delete.png) 5px 6px no-repeat #ffffff } .actionDropDown li ul li a:hover { color:#007fb3; background-color:#f5f5f5; } .actionDropDown li ul li a span { display:block; width:135px; height:25px; background:url(images/arrow-right.png) 120px 9px no-repeat; } .actionDropDown li ul li ul { position:absolute; display:none; top:-1px; left:160px; width:160px; margin:0px !important; padding:0px !important; } .actionDropDown li ul li ul li a, .actionDropDown li ul li ul li a.active { width:140px !important; padding:0 10px !important; background-image:none !important; } .actionMessage{ height: 14px; line-height: 14px; font-size: 11px; color: #d50; } .actionDropDown li a.download { background-image:url(images/solo_icons.png); background-repeat:no-repeat; background-position: 5px -24px; } ================================================ FILE: newscoop/admin-style/widgets.css ================================================ /* dashboard */ .context > .widget, .widget-placeholder { position: relative; margin-top: 13px; display: block; } .ui-dialog.widget { width: auto; position: relative; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } .widget-placeholder { border: 3px dashed #ccc; } .widget > .content > .scroll { margin-top: 3px; padding: 0 3px 3px 0; max-height: 400px; overflow: auto; } .widget .header h3 { margin: 0 0; padding: 0; font-size: 12px; } .widget .header a { float: right; margin: -2px 0 0 5px; border: none; } #dashboard { height: 1%; overflow: hidden; margin: 0 0 0 30px; } #dashboard .dataTables_wrapper { margin: 10px 10px; } #dashboard > .column { float: left; width: 50%; min-height: 400px; max-width: 800px; } #dashboard > .column > .context { margin: 0 14px 0 0; padding: 0; } /* widget manager */ #widgets { height: 1%; max-width: 1000px; overflow: hidden; margin: 0 0 0 30px; padding: 0; } #widgets li { float: left; min-width: 300px; margin: 13px 14px 0 0; padding: 0; border: 1px solid #ccc; background:#FFF; -moz-box-shadow: 0 2px 2px rgba(0,0,0,.10); -webkit-box-shadow: 0 2px 2px rgba(0,0,0,.10); box-shadow: 0 2px 2px rgba(0,0,0,.10); } #widgets h3 { margin: 0 0 2px; padding: 8px; font-size: 1.6em; color:#444; } #widgets p { margin: 0 5px 8px 8px; font-size:1.2em; } #widgets a:hover { text-decoration:underline; } #widgets a.add { padding: 0 0 0 12px; background:url(images/small_add.png) no-repeat 0 3px; } dl.meta { background-color: #f9f9f9; border-top: 1px solid #e1e1e1; margin: 10px 0 0; padding: 8px; font-size: 1.1em; } dl.meta > * { margin: 0; } dl.meta dt { margin-top: 7px; } dl.meta dd { color:#565656; } dl.meta dt:first-child { margin-top: 0; } .widget .extra { position: absolute; top: 19px; right: 0; } .widget .extra fieldset, .widget .extra dl.meta { float: right; clear: right; margin: 0 0 5px; padding: 5px; background-color: #f5f5f5; border: 1px solid #ccc; -moz-border-radius: 5px; border-radius: 5px; } .widget .extra dl.meta { margin-top: 0; } .widget .extra fieldset input[type=text] { width: 21em; } .widget .settings fieldset dt { float: none; width: 99%; } .widget iframe { border: 1px solid #fff; } ================================================ FILE: newscoop/admin-style/zend_admin_stylesheet.css ================================================ ================================================ FILE: newscoop/admin.php ================================================ * @copyright 2012 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl-3.0.txt */ use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; class AppKernel extends Kernel { protected function initializeContainer() { parent::initializeContainer(); try { $timeZone = $this->getContainer()->get('system_preferences_service')->TimeZone; if (!empty($timeZone)) { date_default_timezone_set($timeZone); } } catch (\Exception $e) { } // Set temp dir for Newscoop to project cache directory putenv(sprintf('TMPDIR=%s/../cache', __DIR__)); } public function registerBundles() { $bundles = array( new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), new Symfony\Bundle\SecurityBundle\SecurityBundle(), new Symfony\Bundle\TwigBundle\TwigBundle(), new Symfony\Bundle\MonologBundle\MonologBundle(), new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), new Symfony\Bundle\AsseticBundle\AsseticBundle(), new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new JMS\SerializerBundle\JMSSerializerBundle($this), new FOS\RestBundle\FOSRestBundle(), new Newscoop\GimmeBundle\NewscoopGimmeBundle(), new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(), new Knp\Bundle\MenuBundle\KnpMenuBundle(), new EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle(), new FOS\JsRoutingBundle\FOSJsRoutingBundle(), new Bazinga\Bundle\JsTranslationBundle\BazingaJsTranslationBundle(), new FOS\OAuthServerBundle\FOSOAuthServerBundle(), new Nelmio\ApiDocBundle\NelmioApiDocBundle(), new Newscoop\ZendBridgeBundle\NewscoopZendBridgeBundle(), new Newscoop\NewscoopBundle\NewscoopNewscoopBundle(), new Newscoop\CommunityTickerBundle\NewscoopCommunityTickerBundle(), new Newscoop\ArticlesBundle\NewscoopArticlesBundle(), new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(), new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(), new Newscoop\PluginGeneratorBundle\NewscoopPluginGeneratorBundle() ); if (in_array($this->getEnvironment(), array('dev', 'test'))) { $bundles[] = new RaulFraile\Bundle\LadybugBundle\RaulFraileLadybugBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); } $cachedPlugins = __DIR__ . '/../plugins/available_plugins.json'; if (file_exists($cachedPlugins)) { $plugins = json_decode(file_get_contents($cachedPlugins)); foreach ($plugins as $plugin) { $bundles[] = new $plugin(); } } return $bundles; } public function registerContainerConfiguration(LoaderInterface $loader) { $loader->load(__DIR__.'/configs/symfony/config_'.$this->getEnvironment().'.yml'); } public function getCacheDir() { return $this->truepath($this->rootDir . '/../cache/' . $this->environment); } public function getLogDir() { return $this->truepath($this->rootDir . '/../log'); } /** * Gets the container's base class. * * All names except Container must be fully qualified. * * @return string */ protected function getContainerBaseClass() { return 'Newscoop\DependencyInjection\ContainerBuilder'; } /** * This function is to replace PHP's extremely buggy realpath(). * @param string The original path, can be relative etc. * @return string The resolved path, it might not exist. */ public function truepath($path) { // whether $path is unix or not $unipath=strlen($path)==0 || $path{0}!='/'; // attempts to detect if path is relative in which case, add cwd if(strpos($path,':')===false && $unipath) $path=getcwd().DIRECTORY_SEPARATOR.$path; // resolve path parts (single dot, double dot and double delimiters) $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) continue; if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } $path=implode(DIRECTORY_SEPARATOR, $absolutes); // resolve any symlinks if(file_exists($path) && linkinfo($path)>0)$path=readlink($path); // put initial separator that could have been lost $path=!$unipath ? '/'.$path : $path; return $path; } } ================================================ FILE: newscoop/application/Bootstrap.php ================================================ getOptions(); if (!empty($options['session'])) { Zend_Session::setOptions($options['session']); } Zend_Session::start(); foreach ($_COOKIE as $name => $value) { // remove unused cookies if ($name[0] == 'w' && strrpos('_height', $name) !== FALSE) { setcookie($name, '', time() - 3600); } } } /** * Name must be _initContainer because bootstrap create resource named "container", * and if we change function name, then resource name will be also changed. */ protected function _initContainer() { $this->bootstrap('autoloader'); return Zend_Registry::get('container'); } protected function _initDatabaseObject() { $container = $this->getResource('container'); DatabaseObject::setEventDispatcher($container->getService('event_dispatcher')); DatabaseObject::setResourceNames($container->getParameter('resourceNames')); } protected function _initPlugins() { $options = $this->getOptions(); $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new Application_Plugin_ContentType()); $front->registerPlugin(new Application_Plugin_Upgrade()); $front->registerPlugin(new Application_Plugin_Auth($options['auth'])); $front->registerPlugin(new Application_Plugin_Acl($options['acl'])); } protected function _initRouter() { $this->bootstrap('container'); $routerFactory = new \Newscoop\Router\RouterFactory(); $routerFactory->initRouter(\Zend_Registry::get('container')); } protected function _initActionHelpers() { require_once APPLICATION_PATH . '/controllers/helpers/Smarty.php'; Zend_Controller_Action_HelperBroker::addHelper(new Action_Helper_Smarty()); } protected function _initOdm() { return null; } /** */ protected function _initLog() { $writer = new Zend_Log_Writer_Syslog(array('application' => 'Newscoop')); $log = new Zend_Log($writer); \Zend_Registry::set('log', $log); return $log; } protected function _initAuthStorage() { $storage = new Zend_Auth_Storage_Session('Zend_Auth_Storage'); Zend_Auth::getInstance()->setStorage($storage); } protected function _initAdoDb() { require_once __DIR__ . '/../db_connect.php'; } } ================================================ FILE: newscoop/application/SymfonyRequirements.php ================================================ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /* * Users of PHP 5.2 should be able to run the requirements checks. * This is why the file and all classes must be compatible with PHP 5.2+ * (e.g. not using namespaces and closures). * * ************** CAUTION ************** * * DO NOT EDIT THIS FILE as it will be overriden by Composer as part of * the installation/update process. The original file resides in the * SensioDistributionBundle. * * ************** CAUTION ************** */ /** * Represents a single PHP requirement, e.g. an installed extension. * It can be a mandatory requirement or an optional recommendation. * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration. * * @author Tobias Schultze */ class Requirement { private $fulfilled; private $testMessage; private $helpText; private $helpHtml; private $optional; /** * Constructor that initializes the requirement. * * @param Boolean $fulfilled Whether the requirement is fulfilled * @param string $testMessage The message for testing the requirement * @param string $helpHtml The help text formatted in HTML for resolving the problem * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) * @param Boolean $optional Whether this is only an optional recommendation not a mandatory requirement */ public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false) { $this->fulfilled = (Boolean) $fulfilled; $this->testMessage = (string) $testMessage; $this->helpHtml = (string) $helpHtml; $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText; $this->optional = (Boolean) $optional; } /** * Returns whether the requirement is fulfilled. * * @return Boolean true if fulfilled, otherwise false */ public function isFulfilled() { return $this->fulfilled; } /** * Returns the message for testing the requirement. * * @return string The test message */ public function getTestMessage() { return $this->testMessage; } /** * Returns the help text for resolving the problem * * @return string The help text */ public function getHelpText() { return $this->helpText; } /** * Returns the help text formatted in HTML. * * @return string The HTML help */ public function getHelpHtml() { return $this->helpHtml; } /** * Returns whether this is only an optional recommendation and not a mandatory requirement. * * @return Boolean true if optional, false if mandatory */ public function isOptional() { return $this->optional; } } /** * Represents a PHP requirement in form of a php.ini configuration. * * @author Tobias Schultze */ class PhpIniRequirement extends Requirement { /** * Constructor that initializes the requirement. * * @param string $cfgName The configuration name used for ini_get() * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false, or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived) * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a Boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) * @param Boolean $optional Whether this is only an optional recommendation not a mandatory requirement */ public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false) { $cfgValue = ini_get($cfgName); if (is_callable($evaluation)) { if (null === $testMessage || null === $helpHtml) { throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.'); } $fulfilled = call_user_func($evaluation, $cfgValue); } else { if (null === $testMessage) { $testMessage = sprintf('%s %s be %s in php.ini', $cfgName, $optional ? 'should' : 'must', $evaluation ? 'enabled' : 'disabled' ); } if (null === $helpHtml) { $helpHtml = sprintf('Set %s to %s in php.ini*.', $cfgName, $evaluation ? 'on' : 'off' ); } $fulfilled = $evaluation == $cfgValue; } parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional); } } /** * A RequirementCollection represents a set of Requirement instances. * * @author Tobias Schultze */ class RequirementCollection implements IteratorAggregate { private $requirements = array(); /** * Gets the current RequirementCollection as an Iterator. * * @return Traversable A Traversable interface */ public function getIterator() { return new ArrayIterator($this->requirements); } /** * Adds a Requirement. * * @param Requirement $requirement A Requirement instance */ public function add(Requirement $requirement) { $this->requirements[] = $requirement; } /** * Adds a mandatory requirement. * * @param Boolean $fulfilled Whether the requirement is fulfilled * @param string $testMessage The message for testing the requirement * @param string $helpHtml The help text formatted in HTML for resolving the problem * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) */ public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null) { $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false)); } /** * Adds an optional recommendation. * * @param Boolean $fulfilled Whether the recommendation is fulfilled * @param string $testMessage The message for testing the recommendation * @param string $helpHtml The help text formatted in HTML for resolving the problem * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) */ public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null) { $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true)); } /** * Adds a mandatory requirement in form of a php.ini configuration. * * @param string $cfgName The configuration name used for ini_get() * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false, or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a Boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) */ public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null) { $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false)); } /** * Adds an optional recommendation in form of a php.ini configuration. * * @param string $cfgName The configuration name used for ini_get() * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false, or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a Boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) */ public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null) { $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true)); } /** * Adds a requirement collection to the current set of requirements. * * @param RequirementCollection $collection A RequirementCollection instance */ public function addCollection(RequirementCollection $collection) { $this->requirements = array_merge($this->requirements, $collection->all()); } /** * Returns both requirements and recommendations. * * @return array Array of Requirement instances */ public function all() { return $this->requirements; } /** * Returns all mandatory requirements. * * @return array Array of Requirement instances */ public function getRequirements() { $array = array(); foreach ($this->requirements as $req) { if (!$req->isOptional()) { $array[] = $req; } } return $array; } /** * Returns the mandatory requirements that were not met. * * @return array Array of Requirement instances */ public function getFailedRequirements() { $array = array(); foreach ($this->requirements as $req) { if (!$req->isFulfilled() && !$req->isOptional()) { $array[] = $req; } } return $array; } /** * Returns all optional recommmendations. * * @return array Array of Requirement instances */ public function getRecommendations() { $array = array(); foreach ($this->requirements as $req) { if ($req->isOptional()) { $array[] = $req; } } return $array; } /** * Returns the recommendations that were not met. * * @return array Array of Requirement instances */ public function getFailedRecommendations() { $array = array(); foreach ($this->requirements as $req) { if (!$req->isFulfilled() && $req->isOptional()) { $array[] = $req; } } return $array; } /** * Returns whether a php.ini configuration is not correct. * * @return Boolean php.ini configuration problem? */ public function hasPhpIniConfigIssue() { foreach ($this->requirements as $req) { if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) { return true; } } return false; } /** * Returns the PHP configuration file (php.ini) path. * * @return string|false php.ini file path */ public function getPhpIniConfigPath() { return get_cfg_var('cfg_file_path'); } } /** * This class specifies all requirements and optional recommendations that * are necessary to run the Symfony Standard Edition. * * @author Tobias Schultze * @author Fabien Potencier */ class SymfonyRequirements extends RequirementCollection { const REQUIRED_PHP_VERSION = '5.3.3'; /** * Constructor that initializes the requirements. */ public function __construct() { /* mandatory requirements follow */ $installedPhpVersion = phpversion(); $this->addRequirement( version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='), sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion), sprintf('You are running PHP version "%s", but Symfony needs at least PHP "%s" to run. Before using Symfony, upgrade your PHP installation, preferably to the latest version.', $installedPhpVersion, self::REQUIRED_PHP_VERSION), sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion) ); $this->addRequirement( version_compare($installedPhpVersion, '5.3.16', '!='), 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it', 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)' ); $this->addRequirement( is_dir(__DIR__.'/../vendor/composer'), 'Vendor libraries must be installed', 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/. ' . 'Then run "php composer.phar install" to install them.' ); $baseDir = basename(__DIR__); $this->addRequirement( is_writable(__DIR__.'/cache'), "$baseDir/cache/ directory must be writable", "Change the permissions of the \"$baseDir/cache/\" directory so that the web server can write into it." ); $this->addRequirement( is_writable(__DIR__.'/logs'), "$baseDir/logs/ directory must be writable", "Change the permissions of the \"$baseDir/logs/\" directory so that the web server can write into it." ); $this->addPhpIniRequirement( 'date.timezone', true, false, 'date.timezone setting must be set', 'Set the "date.timezone" setting in php.ini* (like Europe/Paris).' ); if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) { $this->addRequirement( (in_array(date_default_timezone_get(), DateTimeZone::listIdentifiers())), sprintf('Configured default timezone "%s" must be supported by your installation of PHP', date_default_timezone_get()), 'Your default timezone is not supported by PHP. Check for typos in your php.ini file and have a look at the list of deprecated timezones at http://php.net/manual/en/timezones.others.php.' ); } $this->addRequirement( function_exists('json_encode'), 'json_encode() must be available', 'Install and enable the JSON extension.' ); $this->addRequirement( function_exists('session_start'), 'session_start() must be available', 'Install and enable the session extension.' ); $this->addRequirement( function_exists('ctype_alpha'), 'ctype_alpha() must be available', 'Install and enable the ctype extension.' ); $this->addRequirement( function_exists('token_get_all'), 'token_get_all() must be available', 'Install and enable the Tokenizer extension.' ); $this->addRequirement( function_exists('simplexml_import_dom'), 'simplexml_import_dom() must be available', 'Install and enable the SimpleXML extension.' ); if (function_exists('apc_store') && ini_get('apc.enabled')) { $this->addRequirement( version_compare(phpversion('apc'), '3.0.17', '>='), 'APC version must be at least 3.0.17', 'Upgrade your APC extension (3.0.17+).' ); } $this->addPhpIniRequirement('detect_unicode', false); if (extension_loaded('suhosin')) { $this->addPhpIniRequirement( 'suhosin.executor.include.whitelist', create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'), false, 'suhosin.executor.include.whitelist must be configured correctly in php.ini', 'Add "phar" to suhosin.executor.include.whitelist in php.ini*.' ); } if (extension_loaded('xdebug')) { $this->addPhpIniRequirement( 'xdebug.show_exception_trace', false, true ); $this->addPhpIniRequirement( 'xdebug.scream', false, true ); } $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null; $this->addRequirement( null !== $pcreVersion && $pcreVersion > 8.0, sprintf('PCRE extension must be available and at least 8.0 (%s installed)', $pcreVersion ? $pcreVersion : 'not'), 'Upgrade your PCRE extension (8.0+).' ); /* optional recommendations follow */ $this->addRecommendation( file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'), 'Requirements file should be up-to-date', 'Your requirements file is outdated. Run composer install and re-check your configuration.' ); $this->addRecommendation( version_compare($installedPhpVersion, '5.3.4', '>='), 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions', 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.' ); $this->addRecommendation( version_compare($installedPhpVersion, '5.3.8', '>='), 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156', 'Install PHP 5.3.8 or newer if your project uses annotations.' ); $this->addRecommendation( version_compare($installedPhpVersion, '5.4.0', '!='), 'You should not use PHP 5.4.0 due to the PHP bug #61453', 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.' ); $this->addRecommendation( class_exists('DomDocument'), 'PHP-XML module should be installed', 'Install and enable the PHP-XML module.' ); $this->addRecommendation( function_exists('mb_strlen'), 'mb_strlen() should be available', 'Install and enable the mbstring extension.' ); $this->addRecommendation( function_exists('iconv'), 'iconv() should be available', 'Install and enable the iconv extension.' ); $this->addRecommendation( function_exists('utf8_decode'), 'utf8_decode() should be available', 'Install and enable the XML extension.' ); if (!defined('PHP_WINDOWS_VERSION_BUILD')) { $this->addRecommendation( function_exists('posix_isatty'), 'posix_isatty() should be available', 'Install and enable the php_posix extension (used to colorize the CLI output).' ); } $this->addRecommendation( class_exists('Locale'), 'intl extension should be available', 'Install and enable the intl extension (used for validators).' ); if (class_exists('Collator')) { $this->addRecommendation( null !== new Collator('fr_FR'), 'intl extension should be correctly configured', 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.' ); } if (class_exists('Locale')) { if (defined('INTL_ICU_VERSION')) { $version = INTL_ICU_VERSION; } else { $reflector = new ReflectionExtension('intl'); ob_start(); $reflector->info(); $output = strip_tags(ob_get_clean()); preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches); $version = $matches[1]; } $this->addRecommendation( version_compare($version, '4.0', '>='), 'intl ICU version should be at least 4+', 'Upgrade your intl extension with a newer ICU version (4+).' ); } $accelerator = (function_exists('apc_store') && ini_get('apc.enabled')) || function_exists('eaccelerator_put') && ini_get('eaccelerator.enable') || function_exists('xcache_set') ; $this->addRecommendation( $accelerator, 'a PHP accelerator should be installed', 'Install and enable a PHP accelerator like APC (highly recommended).' ); $this->addPhpIniRecommendation('short_open_tag', false); $this->addPhpIniRecommendation('magic_quotes_gpc', false, true); $this->addPhpIniRecommendation('register_globals', false, true); $this->addPhpIniRecommendation('session.auto_start', false); $this->addRecommendation( class_exists('PDO'), 'PDO should be installed', 'Install PDO (mandatory for Doctrine).' ); if (class_exists('PDO')) { $drivers = PDO::getAvailableDrivers(); $this->addRecommendation( count($drivers), sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'), 'Install PDO drivers (mandatory for Doctrine).' ); } } } ================================================ FILE: newscoop/application/autoload.php ================================================ You must set up the project dependencies by running the following commands:

            curl -s http://getcomposer.org/installer | php
            php composer.phar install
        
        EOF; if (PHP_SAPI === 'cli') { $message = strip_tags($message); } die($message); } AnnotationRegistry::registerLoader(array($loader, 'loadClass')); return $loader; ================================================ FILE: newscoop/application/check.php ================================================ getPhpIniConfigPath(); echo "********************************\n"; echo "* *\n"; echo "* Symfony requirements check *\n"; echo "* *\n"; echo "********************************\n\n"; echo $iniPath ? sprintf("* Configuration file used by PHP: %s\n\n", $iniPath) : "* WARNING: No configuration file (php.ini) used by PHP!\n\n"; echo "** ATTENTION **\n"; echo "* The PHP CLI can use a different php.ini file\n"; echo "* than the one used with your web server.\n"; if ('\\' == DIRECTORY_SEPARATOR) { echo "* (especially on the Windows platform)\n"; } echo "* To be on the safe side, please also launch the requirements check\n"; echo "* from your web server using the web/config.php script.\n"; echo_title('Mandatory requirements'); foreach ($symfonyRequirements->getRequirements() as $req) { echo_requirement($req); } echo_title('Optional recommendations'); foreach ($symfonyRequirements->getRecommendations() as $req) { echo_requirement($req); } /** * Prints a Requirement instance */ function echo_requirement(Requirement $requirement) { $result = $requirement->isFulfilled() ? 'OK' : ($requirement->isOptional() ? 'WARNING' : 'ERROR'); echo ' ' . str_pad($result, 9); echo $requirement->getTestMessage() . "\n"; if (!$requirement->isFulfilled()) { echo sprintf(" %s\n\n", $requirement->getHelpText()); } } function echo_title($title) { echo "\n** $title **\n\n"; } ================================================ FILE: newscoop/application/configs/parameters/parameters.yml ================================================ parameters: phpSettings: display_startup_errors: "0" display_errors: "0" includePaths: library: "%application_path%/../library" bootstrap: path: "%application_path%/Bootstrap.php" class: "Bootstrap" appnamespace: "Application" resources: frontController: controllerDirectory: "%application_path%/controllers" params: displayExceptions: "0" moduleDirectory: "%application_path%/modules" actionHelperPaths: Action_Helper: "%application_path%/controllers/helpers" layout: layoutPath: "%application_path%/layouts/scripts/" view: "" modules: - "" session: throw_startup_exceptions: false pluginPaths: Resource: "%application_path%/../library/Resource" session: cookie_path: "/" translation: path: "%application_path%/languages" doctrine: cache: "array" entity: dir: "%application_path%/../library/Newscoop" proxy: dir: "%application_path%/../library/Proxy" namespace: "Proxy" autogenerate: false functions: rand: "Newscoop\Query\MysqlRandom" admin: resources: layout: jsUrl: "/js/app/admin" jsPath: "%application_path%/../js/app/admin" layout: "admin" acl: modules: - "admin" cache: "Doctrine\Common\Cache\ArrayCache" view: "" autoloader: dirs: - "%application_path%/../classes" - "%application_path%/../classes/Extension" - "%application_path%/../template_engine/classes" - "%application_path%/../template_engine/metaclasses" resourceNames: Aliases: "alias" ArticleAttachments: "article-attachment" ArticleAuthors: "article-author" ArticleImages: "article-image" ArticlePublish: "article-publish" Articles: "article" ArticleTopics: "article-topic" ArticleTypeMetadata: "article-metadata" Attachments: "attachment" AuditEvent: "audit-event" AuthorAliases: "author-alias" AuthorBiographies: "author-biography" Authors: "author" AuthorTypes: "author-type" Countries: "county" Images: "image" Issues: "issue" Languages: "language" Locations: "location" Maps: "map" Plugins: "plugin" Publication: "publication" Sections: "section" Subscriptions: "subscription" SystemPreferences: "system-preferences" Templates: "template" Topics: "topic" Translations: "translation" auth: modules: - "admin" ignore: - "auth" - "error" - "legacy" - "login.php" - "password_recovery.php" - "password_check_token.php" acl: modules: - "admin" ignore: - "auth" - "error" - "legacy" - "login.php" - "password_recovery.php" - "password_check_token.php" email: from: "no-reply@domain.com" contact: "info@domain.com" blog: role: "6" publication: "5" issue: "3" type: "bloginfo" article_type: "blog" image: image_path: "%application_path%/../images/" image_prefix: "cms-image-" thumbnail_path: "%application_path%/../images/thumbnails/" thumbnail_prefix: "cms-thumb-" thumbnail_max_size: "64" cache_url: "images/cache" cache_path: "%application_path%/../images/cache/" attachment: file_base_url: "files/" file_directory: "%application_path%/../public/files/" file_num_dirs_level_1: 1000 file_num_dirs_level_2: 1000 subscriptions.service.class: "Newscoop\Services\SubscriptionService" plugins: internal_memory_limit: '' scheduler: environment: 'prod' simple_security: users_file: "%application_path%/configs/security/users.json" remember_me.lifetime: 31536000 # 1 year in seconds doctrine.charset: utf8mb4 # requires Mysql server version >= 5.5.3 ================================================ FILE: newscoop/application/configs/parameters/parameters_cli.yml ================================================ parameters: admin: resources: acl: cache: "Doctrine\Common\Cache\ArrayCache" doctrine: cache: "array" scheduler: environment: 'cli' ================================================ FILE: newscoop/application/configs/parameters/parameters_development.yml ================================================ parameters: admin: resources: acl: cache: "Doctrine\Common\Cache\ArrayCache" doctrine: cache: "array" phpSettings: display_startup_errors: "1" display_errors: "1" resources: frontController: params: displayExceptions: "1" session: cookie_domain: "" scheduler: environment: 'dev' ================================================ FILE: newscoop/application/configs/parameters/parameters_testing.yml ================================================ parameters: admin: resources: acl: cache: "Doctrine\Common\Cache\ArrayCache" audit: events: false community_feed: events: false doctrine: cache: "array" database: driver: "pdo_sqlite" path: ":memory:" functions: rand: "Newscoop\Query\SqliteRandom" phpSettings: display_startup_errors: true display_errors: true resources: frontController: params: displayExceptions: true scheduler: environment: 'test' ================================================ FILE: newscoop/application/configs/security/.gitkeep ================================================ ================================================ FILE: newscoop/application/configs/services/audit.yml ================================================ services: audit: class: Newscoop\Services\AuditService arguments: ["@em", "@user"] tags: - { name: kernel.event_listener, event: comment.update, method: update } - { name: kernel.event_listener, event: comment.delete, method: update } - { name: kernel.event_listener, event: alias.create, method: update } - { name: kernel.event_listener, event: alias.update, method: update } - { name: kernel.event_listener, event: alias.delete, method: update } - { name: kernel.event_listener, event: article-attachment.create, method: update } - { name: kernel.event_listener, event: article-attachment.delete, method: update } - { name: kernel.event_listener, event: article-author.create, method: update } - { name: kernel.event_listener, event: article-author.delete, method: update } - { name: kernel.event_listener, event: article-image.create, method: update } - { name: kernel.event_listener, event: article-image.delete, method: update } - { name: kernel.event_listener, event: article-publish.create, method: update } - { name: kernel.event_listener, event: article.create, method: update } - { name: kernel.event_listener, event: article.delete, method: update } - { name: kernel.event_listener, event: article-topic.attach, method: update } - { name: kernel.event_listener, event: article-topic.detach, method: update } - { name: kernel.event_listener, event: article-metadata.create, method: update } - { name: kernel.event_listener, event: article-metadata.delete, method: update } - { name: kernel.event_listener, event: attachment.create, method: update } - { name: kernel.event_listener, event: attachment.delete, method: update } - { name: kernel.event_listener, event: author-alias.create, method: update } - { name: kernel.event_listener, event: author-alias.delete, method: update } - { name: kernel.event_listener, event: author-biography.create, method: update } - { name: kernel.event_listener, event: author-biography.delete, method: update } - { name: kernel.event_listener, event: author.create, method: update } - { name: kernel.event_listener, event: author.delete, method: update } - { name: kernel.event_listener, event: author-type.create, method: update } - { name: kernel.event_listener, event: author-type.delete, method: update } - { name: kernel.event_listener, event: county.create, method: update } - { name: kernel.event_listener, event: county.delete, method: update } - { name: kernel.event_listener, event: image.create, method: update } - { name: kernel.event_listener, event: image.delete, method: update } - { name: kernel.event_listener, event: localimage.create, method: update } - { name: kernel.event_listener, event: localimage.delete, method: update } - { name: kernel.event_listener, event: issue.create, method: update } - { name: kernel.event_listener, event: issue.delete, method: update } - { name: kernel.event_listener, event: language.create, method: update } - { name: kernel.event_listener, event: language.delete, method: update } - { name: kernel.event_listener, event: location.create, method: update } - { name: kernel.event_listener, event: location.delete, method: update } - { name: kernel.event_listener, event: map.create, method: update } - { name: kernel.event_listener, event: map.delete, method: update } - { name: kernel.event_listener, event: plugin.create, method: update } - { name: kernel.event_listener, event: plugin.delete, method: update } - { name: kernel.event_listener, event: publication.create, method: update } - { name: kernel.event_listener, event: publication.delete, method: update } - { name: kernel.event_listener, event: section.create, method: update } - { name: kernel.event_listener, event: section.delete, method: update } - { name: kernel.event_listener, event: subscription.create, method: update } - { name: kernel.event_listener, event: subscription.delete, method: update } - { name: kernel.event_listener, event: system-preferences.create, method: update } - { name: kernel.event_listener, event: system-preferences.delete, method: update } - { name: kernel.event_listener, event: template.create, method: update } - { name: kernel.event_listener, event: template.delete, method: update } - { name: kernel.event_listener, event: topic.create, method: update } - { name: kernel.event_listener, event: topic.delete, method: update } - { name: kernel.event_listener, event: translation.create, method: update } - { name: kernel.event_listener, event: translation.delete, method: update } ================================================ FILE: newscoop/application/configs/services/comment.yml ================================================ services: comment: class: Newscoop\Services\CommentService arguments: ["@em", "@newscoop.publication_service"] tags: - { name: kernel.event_listener, event: comment.create, method: update } - { name: kernel.event_listener, event: comment.update, method: update } - { name: kernel.event_listener, event: comment.recommended, method: update } - { name: kernel.event_listener, event: comment.delete, method: update } ================================================ FILE: newscoop/application/configs/services/comment_notification.yml ================================================ services: comment_notification: class: Newscoop\Services\CommentNotificationService arguments: ["@email", "@comment", "@user", "@em"] tags: - { name: kernel.event_listener, event: comment.create, method: update } ================================================ FILE: newscoop/application/configs/services/services.yml ================================================ services: doctrine.em: alias: doctrine.orm.default_entity_manager em: alias: doctrine.em dispatcher: alias: event_dispatcher doctrine.event_manager: class: Doctrine\Common\EventManager factory_service: doctrine.em factory_method: getEventManager doctrine.connection: class: Doctrine\DBAL\Connection factory_service: doctrine.em factory_method: getConnection doctrine.adodb: class: Newscoop\Doctrine\AdoDbAdapter arguments: ["@doctrine.connection"] image: class: Newscoop\Image\ImageService arguments: ["%image%", "@em", '@newscoop.cache'] attachment: class: Newscoop\Services\AttachmentService arguments: ["%attachment%", "@em", "@router", "@user"] zend_auth: class: Zend_Auth factory_class: Zend_Auth factory_method: getInstance user: class: Newscoop\Services\UserService arguments: ["@em", "@zend_auth", "@security.context"] tags: - { name: kernel.event_listener, event: user.set_points, method: updateUserPoints } user.manager: class: Newscoop\User\UserManager arguments: ["@em"] user.list: class: Newscoop\Services\ListUserService arguments: ["%blog%", "@em"] user.token: class: Newscoop\Services\UserTokenService arguments: ["@em"] user_type: class: Newscoop\Services\UserTypeService arguments: ["@em"] author: class: Newscoop\Services\AuthorService arguments: ["@em"] audit.maintenance: class: Newscoop\Services\AuditMaintenanceService arguments: ["@em"] user.topic: class: Newscoop\Services\UserTopicService arguments: ["@em", "@event_dispatcher"] auth.adapter: class: Newscoop\Services\Auth\DoctrineAuthService arguments: ["@em"] auth.adapter.social: class: Newscoop\Services\Auth\SocialAuthService arguments: ["@em"] article.link: class: Newscoop\Article\LinkService arguments: ["@em", "@zend_router", "@router"] related_articles: class: Newscoop\Services\RelatedArticlesService arguments: ["@em"] playlists: class: Newscoop\Services\PlaylistsService arguments: ["@em", "@dispatcher", "@newscoop.cache"] article.repository: class: Doctrine\Common\Persistence\ObjectRepository factory_service: doctrine factory_method: getRepository arguments: ["\\Newscoop\\Entity\\Article"] comment.repository: class: Doctrine\Common\Persistence\ObjectRepository factory_service: doctrine factory_method: getRepository arguments: ["\\Newscoop\\Entity\\Comment"] email: class: Newscoop\Services\EmailService arguments: ["@service_container"] blog: class: Newscoop\Services\BlogService arguments: ["%blog%", "@em"] user.search: class: Newscoop\Services\UserSearchService arguments: ["@em"] user.repository: class: Doctrine\Common\Persistence\ObjectRepository factory_service: doctrine factory_method: getRepository arguments: ["\\Newscoop\\Entity\\User"] content.publication: class: Newscoop\Content\PublicationService arguments: ["@em"] content.section: class: Newscoop\Content\SectionService arguments: ["@em"] content.type: class: Newscoop\Content\ContentTypeService arguments: ["@em"] stat: class: Newscoop\Services\StatService arguments: ["@em"] view: class: Newscoop\View\ViewFactory factory_class: Newscoop\View\ViewFactory factory_method: getView view.helper.thumbnail: class: Newscoop\Image\ThumbnailViewHelper arguments: ["@image"] view.helper.rendition: class: Newscoop\Image\RenditionViewHelper arguments: ["@image"] image.rendition: class: Newscoop\Image\RenditionService arguments: ["@em", "@image"] image.search: class: Newscoop\Image\ImageSearchService arguments: ["@em"] package: class: Newscoop\Package\PackageService arguments: ["@em", "@image"] package.search: class: Newscoop\Package\PackageSearchService arguments: ["@em"] zend_router: class: Newscoop\Router\RouterFactory factory_class: Newscoop\Router\RouterFactory factory_method: initRouter arguments: ["@service_container"] subscription: class: Newscoop\Subscription\SubscriptionFacade arguments: ["@em"] subscription.section: class: Newscoop\Subscription\SectionFacade arguments: ["@em"] subscription.ip: class: Newscoop\Subscription\IpFacade arguments: ["@em"] subscription.service: class: %subscriptions.service.class% arguments: ["@em"] random: class: Newscoop\Random webcode: class: Newscoop\WebcodeFacade arguments: ["@em", "@random"] storage.adapter: class: Zend_Cloud_StorageService_Adapter_FileSystem arguments: ["%storage%"] storage: class: Newscoop\Storage\StorageService arguments: ["@storage.adapter"] image.update_storage: class: Newscoop\Image\UpdateStorageService arguments: ["@em", "@storage"] notification: class: Newscoop\Services\NotificationService arguments: ["@em"] topic: alias: newscoop_newscoop.topic_service index_client.default: class: Newscoop\Search\DefaultIndexClient arguments: ["@service_container"] indexer.article: class: Newscoop\Search\Indexer arguments: ["@service_container", "@search.article", "@article.repository", "indexer.article"] indexer.comment: class: Newscoop\Search\Indexer arguments: ["@service_container", "@search.comment", "@comment.repository", "indexer.comment"] indexer.user: class: Newscoop\Search\Indexer arguments: ["@service_container", "@search.user", "@user.repository", "indexer.user"] search.article: class: Newscoop\Article\SearchService arguments: ["@webcode", "@image.rendition", "@article.link", "@em"] search.comment: class: Newscoop\Comment\SearchService arguments: ["@article.link", "@em"] search.user: class: Newscoop\User\SearchService arguments: ["@image"] preferences: class: Newscoop\NewscoopBundle\Services\SystemPreferencesService arguments: ["@em"] newscoop.plugins.manager: class: Newscoop\Services\Plugins\ManagerService arguments: ["@em", "@event_dispatcher", "@newscoop.plugins.service", "@logger", "%plugins%"] newscoop.plugins.service: class: Newscoop\Services\Plugins\PluginsService arguments: ["@dispatcher", "@em"] newscoop.templates.service: class: Newscoop\Services\TemplatesService arguments: ["@newscoop_newscoop.themes_service", "@newscoop.publication_service"] newscoop.placeholders.service: class: Newscoop\Services\PlaceholdersService newscoop.listpaginator.service: class: Newscoop\Services\ListPaginatorService newscoop.cache: class: Newscoop\Services\CacheService arguments: ["@system_preferences_service"] newscoop.input_manipulator: class: Newscoop\Services\InputManipulator user.garbage: class: Newscoop\Services\GarbageCollectionService arguments: ["@em"] newscoop.filesystem: class: Newscoop\Services\FilesystemService arguments: ["@em"] newscoop.scheduler: class: Newscoop\Services\SchedulerService arguments: ["@em", "%scheduler%"] newscoop.editor: class: Newscoop\Services\EditorService arguments: ["@dispatcher", "@em"] # Add this event listener registering to newscoop/application/configs/parameters/custom_parameters.yml # search_indexer: # class: Newscoop\Search\ArticleIndexer # arguments: ["@em", "@search.index"] # tags: # - { name: kernel.event_listener, event: article.delete, method: update } ================================================ FILE: newscoop/application/configs/services/template_lists.yml ================================================ services: newscoop.criteria.users: class: Newscoop\User\UserCriteria newscoop.template_lists.users: class: Newscoop\TemplateList\UsersList arguments: ["@newscoop.criteria.users"] tags: - { name: newscoop.template_lists } ================================================ FILE: newscoop/application/configs/services/user_attributes.yml ================================================ services: user_attributes: class: Newscoop\Services\UserAttributeService arguments: ["@em"] tags: - { name: kernel.event_listener, event: image.delivered, method: update } - { name: kernel.event_listener, event: image.approved, method: update } - { name: kernel.event_listener, event: image.published, method: update } - { name: kernel.event_listener, event: document.delivered, method: update } - { name: kernel.event_listener, event: document.approved, method: update } ================================================ FILE: newscoop/application/configs/services/user_points.yml ================================================ services: user_points: class: Newscoop\Services\UserPointsService arguments: ["@em"] tags: - { name: kernel.event_listener, event: image.published, method: update } ================================================ FILE: newscoop/application/configs/subscriptions/.gitignore ================================================ * !.gitignore ================================================ FILE: newscoop/application/configs/symfony/config.yml ================================================ imports: - { resource: security.yml } # SymfonyFrameworkBundle Configuration framework: secret: pleaseChangeMe!pleaseChangeMe! router: resource: "%kernel.root_dir%/configs/symfony/routing.yml" strict_requirements: %kernel.debug% form: ~ csrf_protection: ~ validation: { enable_annotations: true } templating: { engines: ['twig', 'php'] } trusted_proxies: ~ session: storage_id: newscoop_newscoop.session.storage handler_id: ~ fragments: ~ translator: { fallback: en } http_method_override: true monolog: channels: ["sentry"] handlers: sentry: type: raven dsn: 'http://9cd083992bcc4dbba05b6a0253b30b3b:57ae69b9ea7347c1bca8583ab1e3da5f@sentry.sourcefabric.org/5' level: notice channels: ['sentry'] doctrine: dbal: charset: %doctrine.charset% types: point: Newscoop\NewscoopBundle\ORM\PointType utcdatetime: Newscoop\NewscoopBundle\ORM\UTCDateTimeType orm: dql: numeric_functions: rand: "Newscoop\Query\MysqlRandom" datetime_functions: dayofweek: "Newscoop\Query\MysqlDayOfWeek" dayofmonth: "Newscoop\Query\MysqlDayOfMonth" dayofyear: "Newscoop\Query\MysqlDayOfYear" date_format: "Newscoop\Query\MysqlDateFormat" string_functions: field: "Newscoop\Query\MysqlField" auto_mapping: true mappings: gedmo_translatable: type: annotation prefix: Gedmo\Translatable\Entity dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/MappedSuperclass" alias: GedmoTranslatable # this one is optional and will default to the name set for the mapping is_bundle: false # FOSRestBundle Configuration fos_rest: allowed_methods_listener: true routing_loader: default_format: ~ view: default_engine: twig view_response_listener: true failed_validation: HTTP_BAD_REQUEST formats: json: true mime_types: json: ['application/json', 'application/x-json', 'application/vnd.sourcefabric-org.newscoop+json'] body_listener: decoders: json: fos_rest.decoder.json format_listener: default_priorities: - json - html fallback_format: json prefer_extension: true exception: codes: 'Newscoop\Exception\ResourcesConflictException': 409 'Newscoop\Exception\InvalidParametersException': 422 'Newscoop\Exception\ResourceIsEmptyException': 200 'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404 'Doctrine\ORM\EntityNotFoundException': 404 'Symfony\Component\Form\Exception\InvalidArgumentException': 500 'Symfony\Component\HttpKernel\Exception\FlattenException': 404 'Symfony\Component\Routing\Exception\MethodNotAllowedException': 404 'Newscoop\Exception\ResourceNotModifiedException': 304 'Newscoop\NewscoopException': 500 'OAuth2\OAuth2AuthenticateException': 401 'Newscoop\Exception\AuthenticationException': 401 messages: 'Newscoop\Exception\ResourcesConflictException': true 'Newscoop\Exception\InvalidParametersException': true 'Newscoop\Exception\ResourceIsEmptyException': true 'Symfony\Component\Routing\Exception\ResourceNotFoundException': true 'Doctrine\ORM\EntityNotFoundException': true 'Symfony\Component\Form\Exception\InvalidArgumentException' : true 'Symfony\Component\Routing\Exception\MethodNotAllowedException': true 'Symfony\Component\HttpKernel\Exception\FlattenException': true 'Newscoop\Exception\ResourceNotModifiedException': false 'OAuth2\OAuth2AuthenticateException': true 'Newscoop\NewscoopException': true 'Newscoop\Exception\AuthenticationException': true fos_oauth_server: service: options: supported_scopes: standard_access user_provider: user.manager db_driver: orm client_class: Newscoop\GimmeBundle\Entity\Client access_token_class: Newscoop\GimmeBundle\Entity\AccessToken refresh_token_class: Newscoop\GimmeBundle\Entity\RefreshToken auth_code_class: Newscoop\GimmeBundle\Entity\AuthCode jms_serializer: metadata: auto_detection: true directories: Newscoop: namespace_prefix: Newscoop\Entity path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" NewscoopBundle: namespace_prefix: Newscoop\NewscoopBundle\Entity path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" Newscoop_Comment: namespace_prefix: Newscoop\Entity\Comment path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" Newscoop_Package: namespace_prefix: Newscoop\Package path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" Newscoop_Image: namespace_prefix: Newscoop\Image path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" Newscoop_Snippet: namespace_prefix: Newscoop\Entity\Snippet path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" Newscoop_SnippetTemplate: namespace_prefix: Newscoop\Entity\Snippet\SnippetTemplate path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" Newscoop_Articles: namespace_prefix: Newscoop\ArticlesBundle\Entity path: "@NewscoopGimmeBundle/Resources/config/serializer/newscoop" # SensioExtraBundle Configuration sensio_framework_extra: view: { annotations: false } router: { annotations: true } # Assetic Configuration assetic: debug: %kernel.debug% use_controller: false # bundles: [ ] #java: /usr/bin/java filters: cssrewrite: ~ #closure: # jar: %kernel.root_dir%/Resources/java/compiler.jar #yui_css: # jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar # Twig Configuration twig: debug: %kernel.debug% strict_variables: %kernel.debug% exception_controller: 'Newscoop\GimmeBundle\Controller\ExceptionController::showAction' knp_paginator: page_range: 5 # default page range used in pagination control default_options: page_name: knp_page # page query parameter name sort_field_name: knp_sort # sort field query parameter name sort_direction_name: knp_direction # sort direction query parameter name distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements template: pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template newscoop_gimme: allow_origin: - "*" bazinga_js_translation: locale_fallback: en nelmio_api_doc: name: Newscoop REST API documentation request_listener: enabled: false ewz_recaptcha: public_key: private_key: enabled: true locale_key: kernel.default_locale stof_doctrine_extensions: default_locale: en_US orm: default: tree: true sluggable: true translatable: true sortable: true loggable: false ================================================ FILE: newscoop/application/configs/symfony/config_dev.yml ================================================ imports: - { resource: config.yml } framework: router: resource: "%kernel.root_dir%/configs/symfony/routing_dev.yml" profiler: { only_exceptions: false } monolog: channels: ["sentry"] handlers: sentry: type: raven dsn: 'http://6948f4720ffe4956b25df0fe720da09e:085cd9f5324c4e65abdd55482ca7c5cc@sentry.sourcefabric.org/5' level: notice channels: ['sentry'] main: type: stream path: %kernel.logs_dir%/%kernel.environment%.log level: debug firephp: type: firephp level: info chromephp: type: chromephp level: info # enable the web profiler web_profiler: toolbar: true intercept_redirects: false assetic: use_controller: false ================================================ FILE: newscoop/application/configs/symfony/config_prod.yml ================================================ imports: - { resource: config.yml } monolog: channels: ["sentry"] handlers: sentry: type: raven dsn: 'http://6948f4720ffe4956b25df0fe720da09e:085cd9f5324c4e65abdd55482ca7c5cc@sentry.sourcefabric.org/5' level: notice channels: ['sentry'] main: type: fingers_crossed action_level: error handler: nested nested: type: stream path: %kernel.logs_dir%/%kernel.environment%.log level: debug ================================================ FILE: newscoop/application/configs/symfony/config_testing.yml ================================================ imports: - { resource: config.yml } framework: router: resource: "%kernel.root_dir%/configs/symfony/routing_dev.yml" test: ~ session: storage_id: session.storage.mock_file monolog: handlers: main: type: stream path: %kernel.logs_dir%/%kernel.environment%.log level: debug ================================================ FILE: newscoop/application/configs/symfony/routing.yml ================================================ admin_login: pattern: /admin/login defaults: { _controller: NewscoopNewscoopBundle:Security:login } admin_login_check: pattern: /admin/login_check admin_logout: pattern: /admin/logout{php} defaults: { php: ".php" } fos_js_routing: prefix: /admin resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml" _bazinga_jstranslation: prefix: /admin resource: "@BazingaJsTranslationBundle/Resources/config/routing/routing.yml" fos_oauth_server_token: resource: "@FOSOAuthServerBundle/Resources/config/routing/token.xml" options: expose: true fos_oauth_server_authorize: resource: "@FOSOAuthServerBundle/Resources/config/routing/authorize.xml" options: expose: true oauth_login: pattern: /oauth/v2/auth_login defaults: { _controller: NewscoopGimmeBundle:Oauth:login } methods: GET oauth_login_check: pattern: /oauth/v2/auth_login_check oauth_authentication_result: resource: "@NewscoopGimmeBundle/Controller/OauthController.php" prefix: / type: annotation gimme: type: rest prefix: /api resource: "@NewscoopGimmeBundle/Resources/config/routing.yml" admin_login_check: pattern: /admin/login_check NelmioApiDocBundle: resource: "@NelmioApiDocBundle/Resources/config/routing.yml" prefix: /documentation/rest-api NewscoopGimmeBundleConfigureApi: resource: "@NewscoopGimmeBundle/Controller/ConfigureApiController.php" prefix: / type: annotation newscoop: prefix: / resource: "@NewscoopNewscoopBundle/Resources/config/routing.yml" plugins: resource: . type: plugins zendBridge: prefix: / resource: "@NewscoopZendBridgeBundle/Resources/config/routing.yml" ================================================ FILE: newscoop/application/configs/symfony/routing_dev.yml ================================================ _wdt: resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" prefix: /_wdt _profiler: resource: @WebProfilerBundle/Resources/config/routing/profiler.xml prefix: /_profiler _main: resource: routing.yml ================================================ FILE: newscoop/application/configs/symfony/security.yml ================================================ security: encoders: Symfony\Component\Security\Core\User\User: plaintext Newscoop\Entity\User: id: newscoop_newscoop.password_encoder role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] providers: chain_provider: chain: providers: [backend_db, simple] simple: id: newscoop_newscoop.simple_user_provider backend_db: entity: { class: Newscoop\Entity\User, property: username } frontend_db: entity: { class: Newscoop\Entity\User } firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false login: pattern: ^/admin/login$ security: false password_recovery: pattern: ^/admin/password-recovery security: false password_check_token: pattern: ^/admin/password-check-token security: false oauth_token: pattern: ^/oauth/v2/token security: false oauth_authorize: pattern: ^/oauth/v2/auth provider: backend_db form_login: use_forward: true login_path: /oauth/v2/auth_login check_path: /oauth/v2/auth_login_check success_handler: newscoop_newscoop.security.oauth.success_handler logout: path: /oauth/v2/auth/logout target: /oauth/v2/auth success_handler: newscoop_newscoop.security.oauth.logout.success_handler api: pattern: ^/(api|content\-api) fos_oauth: true stateless: true anonymous: true admin_area: pattern: ^/admin provider: chain_provider form_login: use_forward: true login_path: admin_login check_path: admin_login_check success_handler: newscoop_newscoop.security.authentication.success_handler remember_me: key: "%kernel.secret%" lifetime: %remember_me.lifetime% path: / domain: ~ logout: path: admin_logout target: /admin invalidate_session: false success_handler: newscoop_newscoop.security.logout.success_handler frontend_area: pattern: ^/ provider: frontend_db form_login: login_path: /auth check_path: /auth username_parameter: email password_parameter: password success_handler: newscoop_newscoop.security.authentication.frontend.success_handler require_previous_session: false remember_me: key: "%kernel.secret%" lifetime: %remember_me.lifetime% path: / domain: ~ logout: path: /auth/logout target: / invalidate_session: false success_handler: newscoop_newscoop.security.frontend.logout.success_handler anonymous: true access_control: - { path: ^/admin/login, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/oauth/v2/auth_login$, role: IS_AUTHENTICATED_ANONYMOUSLY } ================================================ FILE: newscoop/application/console ================================================ #!/usr/bin/env php * @copyright 2012 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl-3.0.txt */ global $g_ado_db; // if you don't want to setup permissions the proper way, just uncomment the following PHP line // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information //umask(0000); set_time_limit(0); define('APPLICATION_ENV', 'cli'); require_once __DIR__ . '/../constants.php'; require_once __DIR__ . '/bootstrap.php.cache'; require_once __DIR__ . '/AppKernel.php'; use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Debug\Debug; error_reporting(error_reporting() & ~E_STRICT & ~E_DEPRECATED); $input = new ArgvInput(); $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'prod'); $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod'; if ($debug) { Debug::enable(); } $kernel = new AppKernel($env, $debug); $cli = new Application($kernel); $kernel->boot(); $container = $kernel->getContainer(); \Zend_Registry::set('container', $container); $cli->addCommands(array( new \Newscoop\Tools\Console\Command\LogMaintenanceCommand(), new \Newscoop\Tools\Console\Command\SendStatsCommand(), new \Newscoop\Tools\Console\Command\UpdateImageStorageCommand(), new \Newscoop\Tools\Console\Command\UpdateAutoloadCommand(), new \Newscoop\Tools\Console\Command\UpdateIndexCommand(), new \Newscoop\Tools\Console\Command\ClearIndexCommand(), new \Newscoop\Tools\Console\Command\InstallPluginCommand(), new \Newscoop\Tools\Console\Command\RemovePluginCommand(), new \Newscoop\Tools\Console\Command\UpdatePluginCommand(), new \Newscoop\Tools\Console\Command\DispatchEventForPluginCommand(), new \Newscoop\Tools\Console\Command\UpgradePluginsCommand(), new \Newscoop\Tools\Console\Command\ReloadRenditionsCommand(), new \Newscoop\Tools\Console\Command\GenerateWebcodeCommand(), new \Newscoop\Tools\Console\Command\InstallNewscoopCommand(), new \Newscoop\Tools\Console\Command\CreateOAuthClientCommand(), new \Newscoop\Tools\Console\Command\GenerateORMSchemaCommand(), new \Newscoop\Tools\Console\Command\UserGarbageCollectionCommand(), new \Newscoop\Tools\Console\Command\AutopublishCommand(), new \Newscoop\Tools\Console\Command\ClearOldStatisticsCommand(), new \Newscoop\Tools\Console\Command\IndexerCommand(), new \Newscoop\Tools\Console\Command\EventsNotifierCommand(), new \Newscoop\Tools\Console\Command\SubscriptionsNotifierCommand(), new \Newscoop\Tools\Console\Command\AssignThemeCommand(), new \Newscoop\Tools\Console\Command\SchedulerManagerCommand(), new \Newscoop\Tools\Console\Command\CreateUserCommand() )); $cli->run($input); ================================================ FILE: newscoop/application/controllers/AuthController.php ================================================ _helper->layout->disableLayout(); $this->auth = Zend_Auth::getInstance(); } public function indexAction() { if ($this->auth->hasIdentity()) { $this->_helper->redirector('index', 'dashboard'); } $translator = Zend_Registry::get('container')->getService('translator'); $form = new Application_Form_Login(); $request = $this->getRequest(); if ($authenticationException = $this->getLastAuthenticationError()) { $form->addError($translator->trans($authenticationException->getMessage())); } $this->view->form = $form; } private function getLastAuthenticationError() { $request = \Zend_Registry::get('container')->getService('request'); $session = $request->getSession(); $authenticationException = null; if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { $authenticationException = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); } elseif ($session !== null && $session->has(SecurityContext::AUTHENTICATION_ERROR)) { $authenticationException = $session->get(SecurityContext::AUTHENTICATION_ERROR); $session->remove(SecurityContext::AUTHENTICATION_ERROR); } return $authenticationException; } public function socialAction() { $preferencesService = \Zend_Registry::get('container')->getService('system_preferences_service'); $userService = \Zend_Registry::get('container')->getService('user'); $session = \Zend_Registry::get('container')->getService('session'); $config = array( 'base_url' => $this->view->serverUrl($this->view->url(array('action' => 'socialendpoint'))), 'debug_mode' => false, 'providers' => array( 'Facebook' => array( 'enabled' => true, 'keys' => array( 'id' => $preferencesService->facebook_appid, 'secret' => $preferencesService->facebook_appsecret, ), ), ), ); try { $hauth = new Hybrid_Auth($config); $adapter = $hauth->authenticate($this->_getParam('provider')); $userData = $adapter->getUserProfile(); $socialAdapter = $this->_helper->service('auth.adapter.social'); $socialAdapter->setProvider($adapter->id)->setProviderUserId($userData->identifier); $result = $this->auth->authenticate($socialAdapter); if ($result->getCode() !== Zend_Auth_Result::SUCCESS) { $user = $this->_helper->service('user')->findOneBy(array('email' => $userData->email)); if (!$user) { $publicationService = \Zend_Registry::get('container')->getService('newscoop_newscoop.publication_service'); $user = $this->_helper->service('user')->createPending($userData->email, $userData->firstName, $userData->lastName, null, $publicationService->getPublication()->getId()); } $this->_helper->service('auth.adapter.social')->addIdentity($user, $adapter->id, $userData->identifier); $this->auth->authenticate($socialAdapter); } else { $user = $this->_helper->service('user')->getCurrentUser(); $token = $userService->loginUser($user, 'frontend_area'); $session->set('_security_frontend_area', serialize($token)); $OAuthtoken = $userService->loginUser($user, 'oauth_authorize'); $session->set('_security_oauth_authorize', serialize($OAuthtoken)); } setcookie('NO_CACHE', '1', null, '/', '.'.$this->extractDomain($_SERVER['HTTP_HOST'])); if ($user->isPending()) { $this->_forward('confirm', 'register', 'default', array( 'social' => true, )); } else { $request = $this->getRequest(); if ($request->getParam('_target_path')) { $this->_helper->redirector->gotoUrl($request->getParam('_target_path')); } $this->_helper->redirector('index', 'dashboard'); } } catch (\Exception $e) { throw new \Exception($e->getMessage()); } } public function socialendpointAction() { Hybrid_Endpoint::process(); exit; } public function passwordRestoreAction() { $form = new Application_Form_PasswordRestore(); $translator = Zend_Registry::get('container')->getService('translator'); $request = $this->getRequest(); if ($request->isPost() && $form->isValid($request->getPost())) { $user = $this->_helper->service('user')->findOneBy(array( 'email' => $form->email->getValue(), )); if (!empty($user) && $user->isActive()) { $this->_helper->service('email')->sendPasswordRestoreToken($user); $this->_helper->flashMessenger($translator->trans("E-mail with instructions was sent to given email address.")); $this->_helper->redirector('password-restore-after', 'auth'); } elseif (empty($user)) { $form->email->addError($translator->trans("Given email not found.")); } } $this->view->form = $form; } public function passwordRestoreAfterAction() { } public function passwordRestoreFinishAction() { $translator = Zend_Registry::get('container')->getService('translator'); $user = $this->_helper->service('user')->find($this->_getParam('user')); if (empty($user)) { $this->_helper->flashMessenger(array('error', $translator->trans('User not found.'))); $this->_helper->redirector('password-restore', 'auth'); } if (!$user->isActive()) { $this->_helper->flashMessenger(array('error', $translator->trans('User is not active user.'))); $this->_helper->redirector('password-restore', 'auth'); } $token = $this->_getParam('token', false); if (!$token) { $this->_helper->flashMessenger(array('error', $translator->trans('No token provided.'))); $this->_helper->redirector('password-restore', 'auth'); } if (!$this->_helper->service('user.token')->checkToken($user, $token, 'password.restore')) { $this->_helper->flashMessenger(array('error', $translator->trans('Invalid token.'))); $this->_helper->redirector('password-restore', 'auth'); } $form = new Application_Form_PasswordRestorePassword(); $request = $this->getRequest(); if ($request->isPost() && $form->isValid($request->getPost())) { $this->_helper->service('user')->save($form->getValues(), $user); $this->_helper->service('user.token')->invalidateTokens($user, 'password.restore'); if (!$this->auth->hasIdentity()) { // log in $adapter = $this->_helper->service('auth.adapter'); $adapter->setEmail($user->getEmail())->setPassword($form->password->getValue()); $this->auth->authenticate($adapter); $this->_helper->redirector('index', 'dashboard'); } else { $this->_helper->flashMessenger($translator->trans("Password changed")); $this->_helper->redirector('index', 'auth'); } } $this->view->form = $form; } private function extractDomain($domain) { if (preg_match("/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i", $domain, $matches)) { return $matches['domain']; } else { return $domain; } } } ================================================ FILE: newscoop/application/controllers/AuthorController.php ================================================ _getParam('author') === null) { throw new InvalidArgumentException(); } $this->view->author = new MetaAuthor($this->_getParam('author')); } } ================================================ FILE: newscoop/application/controllers/DashboardController.php ================================================ _helper->layout->disableLayout(); $this->userService = $this->_helper->service('user'); try { $this->user = $this->userService->getCurrentUser(); } catch (AuthenticationException $e) { $this->_helper->redirector('index', 'auth'); } $this->_helper->contextSwitch() ->addActionContext('update-topics', 'json') ->initContext(); } public function preDispatch() { if ($this->user->isPending()) { $this->_helper->redirector('confirm', 'register'); } } public function indexAction() { $translator = Zend_Registry::get('container')->getService('translator'); $form = $this->_helper->form('profile'); $form->setMethod('POST'); $form->setDefaults((array) $this->user->getView()); $form->username->setRequired(false); $form->removeElement('username'); $username = $this->user->getUsername(); $request = $this->getRequest(); if ($request->isPost() && $form->isValid($request->getPost())) { $values = $form->getValues(); $values['username'] = $username; try { if (!empty($values['image'])) { $imageInfo = array_pop($form->image->getFileInfo()); $values['image'] = $this->_helper->service('image')->save($imageInfo); } $this->userService->save($values, $this->user); $this->_helper->flashMessenger->addMessage($translator->trans('Profile saved.', array(), 'users')); $this->_helper->redirector('index'); } catch (\InvalidArgumentException $e) { switch ($e->getMessage()) { case 'username_conflict': $form->username->addError($translator->trans("User with given username exists.")); break; default: $form->image->addError($e->getMessage()); break; } } } $this->view->user = new MetaUser($this->user); $this->view->form = $form; } public function saveTopicsAction() { $form = new Application_Form_Topics(); $topics = $this->_helper->service('topic')->getMultiOptions(); $form->topics->setMultiOptions($topics); $form->selected->setMultiOptions($topics); if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) { $command = new SaveUserTopicsCommand($form->getValues()); $command->userId = $this->user->getId(); $this->_helper->service('user.topic')->saveUserTopics($command); $this->_helper->json($command->selected); } $this->getResponse()->setHttpResponseCode(400); $this->_helper->json($form->getMessages()); } public function updateTopicsAction() { try { $this->_helper->service('user.topic')->updateTopics($this->user, $this->_getParam('topics', array())); $this->view->status = 1; } catch (Exception $e) { $this->view->status = 0; $this->view->message = $e->getMessage(); } } } ================================================ FILE: newscoop/application/controllers/EmailController.php ================================================ getService('system_preferences_service'); $themesService = \Zend_Registry::get('container')->getService('newscoop_newscoop.themes_service'); $themePath = $themesService->getThemePath(); $this->view = new Newscoop\SmartyView(); $this->view ->addScriptPath(APPLICATION_PATH . '/views/scripts/') ->addScriptPath(realpath(APPLICATION_PATH . "/../themes/$themePath")); $this->view->addPath(realpath(APPLICATION_PATH . "/../themes/$themePath")); $this->getHelper('viewRenderer') ->setView($this->view) ->setViewScriptPathSpec(':controller_:action.:suffix') ->setViewSuffix('tpl'); $this->getHelper('layout') ->disableLayout(); $this->view->publication = $this->getRequest()->getServer('SERVER_NAME', 'localhost'); $this->view->site = $preferencesService->SiteTitle; $this->_helper->contextSwitch() ->addActionContext('comment-notify', 'xml') ->initContext(); } public function confirmAction() { $this->view->user = $this->_getParam('user'); $this->view->token = $this->_getParam('token'); } public function passwordRestoreAction() { $this->view->user = $this->_getParam('user'); $this->view->token = $this->_getParam('token'); } public function commentNotifyAction() { if ($this->_getParam('user', false)) { $this->view->username = $this->_getParam('user')->getUsername(); } $article = $this->_getParam('article'); $this->view->articleLink = $this->getArticleLink($article); $this->view->article = new \MetaArticle($article->getLanguageId(), $article->getArticleNumber()); $this->view->comment = $this->_getParam('comment'); } private function getArticleLink(Article $article) { $params = array( 'f_publication_id' => $article->getPublicationId(), 'f_issue_number' => $article->getIssueNumber(), 'f_section_number' => $article->getSectionNumber(), 'f_article_number' => $article->getArticleNumber(), 'f_language_id' => $article->getLanguageId(), 'f_language_selected' => $article->getLanguageId(), ); $queryString = implode('&', array_map(function ($property) use ($params) { return $property . '=' . $params[$property]; }, array_keys($params))); return $this->view->baseUrl("/admin/articles/edit.php?$queryString"); } } ================================================ FILE: newscoop/application/controllers/ErrorController.php ================================================ _getParam('error_handler'); if (!$errors) { return; } $request = $this->getRequest(); $adminControllerFile = __DIR__.'/../..'.str_replace('/admin', '/admin-files', $request->getPathInfo()); if (file_exists($adminControllerFile)) { $this->_forward('index', 'legacy', 'admin', array()); return; } foreach (\CampPlugin::GetEnabled() as $CampPlugin) { $adminControllerFile = dirname(APPLICATION_PATH).'/'.$CampPlugin->getBasePath().str_replace('/admin', '/admin-files', $request->getPathInfo()); if (file_exists($adminControllerFile)) { $this->_forward('index', 'legacy', 'admin', array()); return; } } } public function errorAction() { $translator = \Zend_Registry::get('container')->getService('translator'); if (defined('APPLICATION_ENV') && APPLICATION_ENV == 'development') { $this->_helper->layout->disableLayout(); // allow debuging } $errors = $this->_getParam('error_handler'); if (!$errors) { $this->view->message = $translator->trans('You have reached the error page', array(), 'bug_reporting'); return; } $notFound = array( Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER, Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION, ); if (in_array($errors->type, $notFound)) { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); $this->getResponse()->setHttpResponseCode(404); $templatesService = \Zend_Registry::get('container')->get('newscoop.templates.service'); $templatesService->renderTemplate('404.tpl'); return; } switch ($errors->type) { case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: // 404 error -- controller or action not found $this->getResponse()->setHttpResponseCode(404); $this->view->message = $translator->trans('Page not found', array(), 'bug_reporting'); break; default: // application error $this->getResponse()->setHttpResponseCode(500); $this->view->message = $translator->trans('Application error', array(), 'bug_reporting'); break; } if (defined('APPLICATION_ENV') && APPLICATION_ENV == 'development') { // conditionally display exceptions if ($this->getInvokeArg('displayExceptions') == true) { $this->view->exception = $errors->exception; } $this->view->request = $errors->request; $this->view->errors = $errors; } } } ================================================ FILE: newscoop/application/controllers/FeedbackController.php ================================================ getHelper('contextSwitch')->addActionContext('save', 'json')->initContext(); $this->getHelper('contextSwitch')->addActionContext('upload', 'json')->initContext(); } public function saveAction() { $translator = Zend_Registry::get('container')->getService('translator'); $userService = Zend_Registry::get('container')->getService('user'); $this->_helper->layout->disableLayout(); $parameters = $this->getRequest()->getParams(); $errors = array(); $auth = Zend_Auth::getInstance(); $publication = new Publication($parameters['f_publication']); if ($auth->getIdentity()) { $acceptanceRepository = $this->getHelper('entity')->getRepository('Newscoop\Entity\Comment\Acceptance'); $user = new User($auth->getIdentity()); $userIp = $userService->getUserIp(); if ($acceptanceRepository->checkParamsBanned($user->m_data['Name'], $user->m_data['EMail'], $userIp, $parameters['f_publication'])) { $errors[] = $translator->trans('You have been banned from writing feedbacks.'); } } else { $errors[] = $translator->trans('You are not logged in.'); } if (!array_key_exists('f_feedback_content', $parameters) || empty($parameters['f_feedback_content'])) { $errors[] = $translator->trans('Feedback content was not filled in.'); } if (empty($errors)) { $feedbackRepository = $this->getHelper('entity')->getRepository('Newscoop\Entity\Feedback'); $feedback = new Feedback(); $values = array( 'user' => $auth->getIdentity(), 'publication' => $parameters['f_publication'], 'section' => $parameters['f_section'], 'article' => $parameters['f_article'], 'subject' => $parameters['f_feedback_subject'], 'message' => $parameters['f_feedback_content'], 'url' => $parameters['f_feedback_url'], 'time_created' => new DateTime(), 'language' => $parameters['f_language'], 'status' => 'pending', 'attachment_type' => 'none', 'attachment_id' => 0 ); if (isset($parameters['image_id'])) { $values['attachment_type'] = 'image'; $values['attachment_id'] = $parameters['image_id']; $feedbackRepository->save($feedback, $values); $feedbackRepository->flush(); $current_user = $this->_helper->service('user')->getCurrentUser(); $this->_helper->service->getService('dispatcher') ->dispatch('image.delivered', new GenericEvent($this, array( 'user' => $current_user, 'image_id' => $values['attachment_id'] ))); $this->view->response = $translator->trans('File is uploaded and your message is sent.'); } else if (isset($parameters['document_id'])) { $values['attachment_type'] = 'document'; $values['attachment_id'] = $parameters['document_id']; $feedbackRepository->save($feedback, $values); $feedbackRepository->flush(); $current_user = $this->_helper->service('user')->getCurrentUser(); $this->_helper->service->getService('dispatcher') ->dispatch('document.delivered', new GenericEvent($this, array( 'user' => $current_user, 'document_id' => $values['attachment_id'] ))); $this->view->response = $translator->trans('File is uploaded and your message is sent.'); } else { $feedbackRepository->save($feedback, $values); $feedbackRepository->flush(); $this->view->response = $translator->trans('Your message is sent.'); } } else { $errors = implode('
        ', $errors); $errors = $translator->trans('Following errors have been found:') . '
        ' . $errors; $this->view->response = $errors; } } public function uploadAction() { global $Campsite; $auth = Zend_Auth::getInstance(); $userId = $auth->getIdentity(); $_FILES['file']['name'] = preg_replace('/[^\w\._]+/', '', $_FILES['file']['name']); $mimeType = $_FILES['file']['type']; $type = explode('/', $mimeType); if ($type[0] == 'image') { $file = Plupload::OnMultiFileUploadCustom($Campsite['IMAGE_DIRECTORY']); $image = Image::ProcessFile($_FILES['file']['name'], $_FILES['file']['name'], $userId, array('Source' => 'feedback', 'Status' => 'Unapproved', 'Date' => date('Y-m-d'))); $this->view->response = 'image_'.$image->getImageId(); } else if ($type[1] == 'pdf') { $attachment = new Attachment(); $attachment->makeDirectories(); $file = Plupload::OnMultiFileUploadCustom($attachment->getStorageLocation()); $document = Attachment::ProcessFile($_FILES['file']['name'], $_FILES['file']['name'], $userId, array('Source' => 'feedback', 'Status' => 'Unapproved')); $this->view->response = 'pdf_'.$document->getAttachmentId(); } } public function indexAction() { $this->view->param = $this->_getParam('switch'); } } ================================================ FILE: newscoop/application/controllers/ImageController.php ================================================ getResponse()->clearHeaders(); $this->getResponse()->setHeader('Cache-Control', sprintf('public, max-age=%d', 3600 * 24 * 30), true); $this->getResponse()->setHeader('Pragma', 'cache', true); $this->getResponse()->setHeader('Expires', gmdate(self::DATE_FORMAT, date_create('+30 days')->getTimestamp()), true); try { $this->_helper->service('image')->generateFromSrc($this->_getParam('src')); $this->getResponse()->setHeader('Content-Type', $this->getContentType($this->getPath()), true); $this->getResponse()->sendHeaders(); $this->getResponse()->setBody(file_get_contents($this->getPath())); } catch (\Exception $e) { $this->getResponse()->clearHeaders(); $this->getResponse()->setHttpResponseCode(404); } $this->getResponse()->sendResponse(); exit; } /** * Get image path * * @return string */ private function getPath() { if ($this->path === null) { $image = \Zend_Registry::get('container')->getParameter('image'); $this->path = implode('/', array( rtrim($image['cache_path'], '/'), $this->_getParam('src'), )); } return $this->path; } /** * Get content type for given file * * @param string $path * @return string */ private function getContentType($path) { if (file_exists($path)) { $info = getimagesize($path); return $info['mime']; } foreach ($this->types as $type) { if (preg_match("/\.{$type}\$/i", $path)) { return "image/{$type}"; } } return 'image/jpeg'; } } ================================================ FILE: newscoop/application/controllers/LegacyController.php ================================================ _helper->layout->disableLayout(); } public function preDispatch() { if ($this->getRequest()->getParam('logout') === 'true') { $this->_forward('logout', 'auth', 'default', array( 'url' => $this->getRequest()->getPathInfo(), )); } } public function indexAction() { global $controller; $controller = $this; require_once($GLOBALS['g_campsiteDir'].DIRECTORY_SEPARATOR.'include'.DIRECTORY_SEPARATOR.'campsite_constants.php'); require_once(CS_PATH_CONFIG.DIR_SEP.'install_conf.php'); $local_path = dirname(__FILE__) . '/include'; set_include_path($local_path . PATH_SEPARATOR . get_include_path()); require_once(CS_PATH_INCLUDES.DIR_SEP.'campsite_init.php'); // initializes the campsite object $campsite = new CampSite(); // loads site configuration settings $campsite->loadConfiguration(CS_PATH_CONFIG.DIR_SEP.'configuration.php'); // starts the session $campsite->initSession(); // initiates the context $campsite->init(); // dispatches campsite $campsite->dispatch(); if (APPLICATION_ENV !== 'development' || APPLICATION_ENV !== 'dev') { set_error_handler(create_function('', 'return true;')); } // renders the site $campsite->render(); // triggers an event after displaying $campsite->event('afterRender'); } public function postDispatch() {} } ================================================ FILE: newscoop/application/controllers/MyTopicsController.php ================================================ _helper->layout->disableLayout(); try { $this->user = $this->_helper->service('user')->getCurrentUser(); } catch (AuthenticationException $e) { $this->user = null; } } public function preDispatch() { if (!$this->user && $this->getRequest()->getActionName() == 'index') { $this->_forward('auth'); } } public function indexAction() { $this->view->user = new MetaUser($this->user); } public function authAction() { $this->_helper->redirector('index', 'auth'); } } ================================================ FILE: newscoop/application/controllers/OmniboxController.php ================================================ _helper->layout->disableLayout(); $this->auth = Zend_Auth::getInstance(); } public function indexAction() { $this->_helper->viewRenderer->setViewSuffix('tpl'); $this->view->gimme = $this->_getParam('gimme'); } public function loginAction() { $this->getHelper('contextSwitch')->addActionContext('login', 'json')->initContext(); $translator = Zend_Registry::get('container')->getService('translator'); $request = $this->getRequest(); if ($request->isPost()) { $params = $request->getParams(); $adapter = $this->_helper->service('auth.adapter'); $adapter->setEmail($params['email'])->setPassword($params['password']); $result = $this->auth->authenticate($adapter); if ($result->getCode() == Zend_Auth_Result::SUCCESS) { $user = Zend_Registry::get('container')->getService('user')->getCurrentUser(); $metaUser = new \MetaUser($user); $width = array_key_exists("imageWidth", $params) ? $params['imageWidth'] : 80; $height = array_key_exists("imageHeight", $params) ? $params['imageHeight'] : 80; $specification = array_key_exists("imageSpecification", $params) ? $params['imageSpecification'] : 'fit'; $this->view->userData = array( 'realName' => $user->getRealName(), 'username' => $user->getUsername(), 'avatar' => $metaUser->image($width, $height, $specification) ); $this->view->response = 'OK'; } else { $this->view->response = $translator->trans('Login failed.'); } } } public function logoutAction() { $this->getHelper('contextSwitch')->addActionContext('logout', 'json')->initContext(); if ($this->auth->hasIdentity()) { $this->auth->clearIdentity(); } $this->view->response = 'OK'; } } ================================================ FILE: newscoop/application/controllers/RatingController.php ================================================ em = \Zend_Registry::get('container')->getService('em'); } public function saveAction() { $this->_helper->layout->disableLayout(); $params = $this->getRequest()->getParams(); $translator = Zend_Registry::get('container')->getService('translator'); $errors = array(); $auth = Zend_Auth::getInstance(); if ($auth->getIdentity()) { $userRepository = $this->em->getRepository('Newscoop\Entity\User'); $ratingRepository = $this->em->getRepository('Newscoop\Entity\Rating'); $user = $userRepository->find($auth->getIdentity()); if ($ratingRepository->countBy(array('articleId' => $params['f_article_number'], 'userId' => $user->getId())) > 0) { // update the existing rating $rating = $ratingRepository->findOneBy(array('articleId' => $params['f_article_number'], 'userId' => $user->getId())); $ratingRepository->update($rating, array('ratingScore' => $params['f_rating_score'])); $ratingRepository->flush(); $errors[] = $translator->trans('Your rating has been updated'); } } else { $errors[] = $translator->trans('You are not logged in.'); } if (empty($errors)) { $rating = new Rating(); $values = array( 'userId' => $user->getId(), 'articleId' => $params['f_article_number'], 'ratingScore' => $params['f_rating_score'], 'timeCreated' => new DateTime() ); $ratingRepository->save($rating, $values); $ratingRepository->flush(); $this->view->response = $this->getArticleRating($params['f_article_number']); } else { $errors = implode('
        ', $errors); $this->view->response = array_merge($this->getArticleRating($params['f_article_number']), array('error' => $errors)); } $this->_helper->json($this->view->response); } public function indexAction() { $this->view->param = $this->_getParam('switch'); } public function showAction() { $this->_helper->layout->disableLayout(); $articleId = $this->_getParam('f_article_number'); $this->_helper->json($this->getArticleRating($articleId)); } /** * Get rating stats for a given article * * @param int $articleId * * @return array */ protected function getArticleRating($articleId) { $ratingRepository = $this->em->getRepository('Newscoop\Entity\Rating'); $ratingScores = $ratingRepository->getArticleRating($articleId); $rating = array( 'widget_id' => $articleId, 'number_votes' => 0, 'total_score' => 0, 'dec_avg' => 0, 'whole_avg' => 0 ); if (!empty($ratingScores)) { $rating['widget_id'] = $articleId; $rating['number_votes'] = (int) $ratingScores[0]['number_votes']; $rating['total_score'] = (int) $ratingScores[0]['total_score']; $rating['dec_avg'] = (float) round($ratingScores[0]['avg_score'], 2); $rating['whole_avg'] = (int) round($ratingScores[0]['avg_score']); } return $rating; } } ================================================ FILE: newscoop/application/controllers/RegisterController.php ================================================ _helper->contextSwitch ->addActionContext('generate-username', 'json') ->addActionContext('check-username', 'json') ->addActionContext('check-email', 'json') ->addActionContext('pending', 'json') ->addActionContext('create-user', 'json') ->initContext(); $this->auth = Zend_Auth::getInstance(); } public function indexAction() { $translator = \Zend_Registry::get('container')->getService('translator'); $form = new Application_Form_Register(); $form->setMethod('POST'); $request = $this->getRequest(); if ($request->isPost() && $form->isValid($request->getPost())) { $values = $form->getValues(); $users = $this->_helper->service('user')->findBy(array( 'email' => $values['email'], )); if (count($users) > 0) { $user = array_pop($users); } else { $publicationService = \Zend_Registry::get('container')->getService('newscoop_newscoop.publication_service'); $user = $this->_helper->service('user')->createPending($values['email'], null, null, null, $publicationService->getPublication()->getId()); } if (!$user->isPending()) { $form->email->addError(sprintf($translator->trans('User with email %s is registered already.', array(), 'users'), $values['email'])); } else { $this->_helper->service('email')->sendConfirmationToken($user); $this->_helper->redirector('after'); } } $this->view->form = $form; } public function createUserAction() { $parameters = $this->getRequest()->getParams(); $user = $this->_helper->service('user')->findBy(array( 'email' => $parameters['email'], )); if ($user) { echo '0'; exit; } else { $user = $this->_helper->service('user')->createPending($parameters['email'], $parameters['first_name'], $parameters['last_name'], $parameters['subscriber_id']); $this->_helper->service('email')->sendConfirmationToken($user); echo '1'; exit; } } public function afterAction() { } public function confirmAction() { $translator = \Zend_Registry::get('container')->getService('translator'); $session = \Zend_Registry::get('container')->getService('session'); $user = $this->getAuthUser(); $form = $this->_helper->form('confirm'); $form->setMethod('POST'); $form->setDefaults(array( 'first_name' => $user->getFirstName(), 'last_name' => $user->getLastName(), 'username' => $this->_helper->service('user')->generateUsername($user->getFirstName(), $user->getLastName()), )); if ($this->auth->hasIdentity()) { $form->removeElement('password'); $form->removeElement('password_confirm'); } $request = $this->getRequest(); if ($request->isPost() && $form->isValid($request->getPost())) { $values = $form->getValues(); try { if (!empty($values['image'])) { $imageInfo = array_pop($form->image->getFileInfo()); $values['image'] = $this->_helper->service('image')->save($imageInfo); } $this->_helper->service('user')->savePending($values, $user); $this->_helper->service('dispatcher')->dispatch('user.register', new GenericEvent($this, array( 'user' => $user, ))); $this->_helper->service('user.token')->invalidateTokens($user, 'email.confirm'); $auth = \Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $this->_helper->flashMessenger('User registered successfully.'); if (isset($values['_target_path']) && !empty($values['_target_path'])) { $this->_helper->redirector->gotoUrl($values['_target_path']); } $this->_helper->redirector(null, null, 'default'); } else { $adapter = $this->_helper->service('auth.adapter'); $adapter->setEmail($user->getEmail())->setPassword($values['password']); $auth->authenticate($adapter); $token = $this->_helper->service('user')->loginUser($user, 'frontend_area'); $session->set('_security_frontend_area', serialize($token)); $OAuthtoken = $this->_helper->service('user')->loginUser($user, 'oauth_authorize'); $session->set('_security_oauth_authorize', serialize($OAuthtoken)); if (isset($values['_target_path']) && !empty($values['_target_path'])) { $this->_helper->redirector->gotoUrl($values['_target_path']); } $this->_helper->redirector('index', 'dashboard', 'default', array('first' => 1)); } } catch (InvalidArgumentException $e) { $form->username->addError($translator->trans('Username is used. Please use another one.', array(), 'users')); } } $this->view->form = $form; $this->view->user = new \MetaUser($user); $this->view->social = $this->_getParam('social') ?: false; } public function generateUsernameAction() { $this->view->username = $this->_helper->service('user') ->generateUsername($this->_getParam('first_name'), $this->_getParam('last_name')); } /** * Test if username is available */ public function checkUsernameAction() { $this->view->status = $this->_helper->service('user') ->checkUsername($this->_getParam('username')); } /** * Test if email is available */ public function checkEmailAction() { $users = $this->_helper->service('user')->findBy(array( 'email' => $this->_getParam('email'), )); if (sizeof($users) > 0) { $user = array_pop($users); if (!$user->isPending()) { $this->view->status = false; return; } } $this->view->status = true; } public function pendingAction() { if ($this->_getParam('email')) { $user = $this->_helper->service('user')->findBy(array('email' => $this->_getParam('email'))); if ($user) { $this->view->result = '0'; } else { $user = $this->_helper->service('user')->createPending($this->_getParam('email')); $this->_helper->service('email')->sendConfirmationToken($user); $this->view->result = '1'; } } $this->view->result = '0'; } /** * Get user by token or auth * * @return Newscoop\Entity\User */ private function getAuthUser() { if ($this->auth->hasIdentity()) { $user = $this->_helper->service('user')->find($this->auth->getIdentity()); } else { $user = $this->_helper->service('user')->find($this->_getParam('user')); } if (empty($user)) { $this->_helper->flashMessenger(array('error', "User not found")); $this->_helper->redirector(null, null, 'default'); } if (!$user->isPending()) { $this->_helper->flashMessenger(array('error', "User has been activated")); $this->_helper->redirector(null, null, 'default'); } if ($this->auth->hasIdentity()) { return $user; } $token = $this->_getParam('token', false); if (!$token && !$auth->hasIdentity()) { $this->_helper->flashMessenger(array('error', "No token provided")); $this->_helper->redirector(null, null, 'default'); } if (!$this->_helper->service('user.token')->checkToken($user, $token, 'email.confirm')) { $this->_helper->flashMessenger(array('error', "Invalid token")); $this->_helper->redirector(null, null, 'default'); } return $user; } } ================================================ FILE: newscoop/application/controllers/SearchController.php ================================================ _getParam('language')) { $gimme = CampTemplate::singleton()->context(); $gimme->language = MetaLanguage::createFromCode($this->_getParam('language')); } } } ================================================ FILE: newscoop/application/controllers/TopicController.php ================================================ * @copyright 2012 Sourcefabric o.p.s. * @license http://www.gnu.org/licenses/gpl-3.0.txt */ /** * Topics controller */ class TopicController extends Zend_Controller_Action { public function articlesAction() { $em = \Zend_Registry::get('container')->get('em'); $topicId = $this->_getParam('id'); $gimme = CampTemplate::singleton()->context(); $language = $em->getRepository('Newscoop\Entity\Language') ->findOneByCode($this->_getParam('language')); $query = $em->getRepository('Newscoop\NewscoopBundle\Entity\Topic') ->getSingleTopicQuery($topicId, $language->getCode()); $topic = $query->getOneOrNullResult(); if (!$topic) { throw new \Exception('We can\'t find that topic'); } $gimme->topic = new \MetaTopic($topic->getId()); $this->view->topic = $gimme->topic; } } ================================================ FILE: newscoop/application/controllers/UserController.php ================================================ service = $this->_helper->service('user.list'); $this->_helper->contextSwitch() ->addActionContext('send-email', 'json') ->initContext(); $this->page = $this->_getParam('page', 1); if ($this->page < 1) { $this->page = 1; } } public function indexAction() { $count = $this->service->getActiveUsers(true); $users = $this->service->getActiveUsers(false, $this->page, self::LIMIT); $this->setViewUsers($users); $this->setViewPaginator($count, self::LIMIT); } public function searchAction() { $query = $this->_getParam('q'); $users = $this->service->findUsersBySearch($query); $this->setViewUsers($users); $this->setViewPaginator(0, self::LIMIT); $this->render('index'); } public function filterAction() { list($from, $to) = array_map('strtolower', explode('-', $this->_getParam('f', 'a-z'))); $letters = range($from, $to); $count = $this->service->findUsersLastNameInRange($letters, true); $users = $this->service->findUsersLastNameInRange($letters, false, $this->page, self::LIMIT); $this->setViewUsers($users); $this->setViewPaginator($count, self::LIMIT); $this->render('index'); } public function editorsAction() { $count = $this->service->getEditorsCount(); $users = $this->service->findEditors(self::LIMIT, ($this->page - 1) * self::LIMIT); $this->setViewUsers($users); $this->setViewPaginator($count, self::LIMIT); $this->view->active = 'editors'; $this->render('index'); } /** * Set view users * * @param array $users * @return void */ private function setViewUsers($users) { $this->view->users = array_map(function($user) { return new \MetaUser($user); }, $users); } /** * Set view paginator * * @param int $count * @param int $perPage * @return void */ private function setViewPaginator($count, $perPage) { $adapter = new Zend_Paginator_Adapter_Null($count); $paginator = new Zend_Paginator($adapter); Zend_Paginator::setDefaultScrollingStyle('Sliding'); $paginator->setItemCountPerPage($perPage); $paginator->setCurrentPageNumber($this->page); $this->view->paginator = $paginator->getPages(); } public function profileAction() { $this->view->headLink()->appendStylesheet($this->view->baseUrl('/js/jquery/fancybox/jquery.fancybox-1.3.4.css')); $this->view->headScript()->appendFile($this->view->baseUrl('/js/jquery/fancybox/jquery.fancybox-1.3.4.pack.js')); $this->view->headScript()->appendFile($this->view->baseUrl('/public/js/user_profile.js')); $user = $this->getUser($this->_getParam('username')); $this->view->user = new MetaUser($user); $this->view->profile = $user->getAttributes(); } public function sendEmailAction() { $translator = Zend_Registry::get('container')->getService('translator'); $to = $this->getUser($this->_getParam('username')); if (!$to->getAttribute('email_public')) { $this->view->error = $translator->trans("User has no public email."); return; } $from = $this->_helper->service('user')->getCurrentUser(); if (!$from) { $this->view->message = $translator->trans("You have to be logged in to send an email."); return; } if ($to->getId() == $from->getId()) { $this->view->message = $translator->trans("You can't send email to yourself."); return; } $form = new Application_Form_SendEmail(); $request = $this->getRequest(); if ($form->isValid($request->getParams())) { $values = $form->getValues(); $this->_helper->service('email')->sendUserEmail($from->getEmail(), $to->getEmail(), $values['subject'], $values['message']); $this->view->status = 1; } } /** * Get user by username * * @param string $username * @return Newscoop\Entity\User */ private function getUser($username) { if (empty($username)) { $this->_helper->flashMessenger(array('error', "User '$username' not found")); $this->_helper->redirector('index'); } $user = $this->service->findOneBy(array( 'username' => $username, )); if (!$user || !$user->isActive() || !$user->isPublic()) { $this->_helper->flashMessenger(array('error', "User '$username' not found")); $this->_helper->redirector('index'); } return $user; } } ================================================ FILE: newscoop/application/controllers/helpers/Acl.php ================================================ getAcl($role); } /** * Permission check * * @params string|NULL $resource * @params string|NULL $action * @params Newscoop\Entity\User|NULL $user * @return bool */ public function isAllowed($resource, $action = NULL, $user = NULL) { if ($user === NULL) { $user = $this->getCurrentUser(); } if ($resource !== NULL) { $resource = strtolower($resource); } if ($action !== NULL) { $action = strtolower($action); } return $this->getAcl($user)->isAllowed($user, $resource, $action); } /** * Check permissions and redirect to error screen if not allowed * * @params string $resource * @params string $action * @return void */ public function check($resource, $action) { $translator = \Zend_Registry::get('container')->getService('translator'); if (!$this->isAllowed($resource, $action)) { $redirector = $this->getActionController()->getHelper('redirector'); $redirector->gotoSimple('deny', 'error', 'admin', array( 'message' => $translator->trans('You are not allowed to $1 $2.', array('$1' => $action, '$2' => $resource), 'user_types'), )); } } /** * Set current user * * @param Newscoop\Entity\User $user * @return Action_Helper_Acl */ public function setUser(User $user) { $this->user = $user; return $this; } /** * Get current user * * @return Newscoop\Entity\User */ private function getCurrentUser() { if ($this->user === NULL) { $this->setUser(Zend_Registry::get('user')); } return $this->user; } } ================================================ FILE: newscoop/application/controllers/helpers/Article.php ================================================ $article->getPublicationId(), 'f_issue_number' => $article->getIssueNumber(), 'f_section_number' => $article->getSectionNumber(), 'f_article_number' => $article->getArticleNumber(), 'f_language_id' => $article->getLanguageId(), 'f_language_selected' => $article->getLanguageId(), ); $paramsStrings = array(); foreach ($params as $key => $val) { $paramsStrings[] = "$key=$val"; } return '/admin/articles/edit.php?' . implode('&', $paramsStrings); } } ================================================ FILE: newscoop/application/controllers/helpers/Datatable.php ================================================ getRequest(); $this->getActionController()->getHelper('contextSwitch') ->addActionContext($request->getParam('action', 'table'), 'json') ->initContext(); $view = $this->getActionController()->initView(); $this->iOptions = array( 'sAjaxSource' => $view->url(array( 'controller' => $request->getParam('controller'), 'action' => $request->getParam('action', 'index'), 'format' => 'json', )) . '?format=json', 'bServerSide' => true, 'bJQueryUI' => true, 'bAutoWidth' => true, 'bSaveState' => true, 'iDisplayLength' => 25, 'bLengthChange' => true, 'sPaginationType' => 'full_numbers', 'bPaginate' => true, 'sDom' => '<"H"lfri>t<"F"ip>', 'aoColumnDefs' => array() ); return $this; } /** * Setter for options * * @param string $p_key * @param mixed $p_value * @return Action_Helper_Datatable */ public function setOption($p_key, $p_value) { $this->iOptions[$p_key] = $p_value; // return this for chaining mechanism return $this; } /** * Set Datasource * * @param Newscoop\Datatable\ISource $p_dataSource * @return Action_Helper_Datatable */ public function setDataSource($p_dataSource) { $this->dataSource = $p_dataSource; // return this for chaining mechanism return $this; } /** * Set entity * * @param string $entity * @return Action_Helper_Datatable */ public function setEntity($p_entity) { $em = $this->getActionController() ->getHelper('entity') ->getManager(); $this->dataSource = new DatatableRepository($em, (string) $p_entity); // return this for chaining mechanism return $this; } private function buildColumnDefs() { foreach($this->colsIndex as $key => $value) { $this->iOptions['aoColumnDefs'][] = array( 'aTargets' => array($value)); } } /** * Set table columns * * @param array $cols * @return Action_Helper_Datatable */ public function setCols(array $cols, array $sorting = array()) { $this->cols = $cols; $this->colsIndex = array_flip(array_keys($this->cols)); $this->buildColumnDefs(); $this->setSorting($sorting); // return this for chaining mechanism return $this; } /** * Set initial sorting columns (aaSorting) * * @param array $initialSort * @return Action_Helper_Datatable */ public function setInitialSorting(array $initial_sort = array()) { $aa_sort = array(); foreach ($initial_sort as $column_name => $direction) { $aa_sort[] = array($this->colsIndex[$column_name], $direction); } $this->iOptions['aaSorting'] = $aa_sort; // return this for chaining mechanism return $this; } /** * Set searchable columns (bSearchable_col#) * * @param array $searchable * @return Action_Helper_Datatable */ public function setSearchable(array $searchable = array()) { foreach ($searchable as $column_name => $boolean) { $id = $this->colsIndex[$column_name]; $this->iOptions["bSearchable_{$id}"] = $boolean; } // return this for chaining mechanism return $this; } /** * Set sorting columns * * @param array $nonsorting * @return Action_Helper_Datatable */ public function setSorting(array $p_sorting = array()) { $this->setHeader('bSortable', $p_sorting); // return this for chaining mechanism return $this; } /** * Set strip classes to use when rendering the table * Usefull for odd and even class * * @param array $p_value * @return Action_Helper_Datatable */ public function setStripClasses(array $p_value = array()) { $this->iOptions['asStripClasses'] = $p_value; // return this for chaining mechanism return $this; } /** * Toggle automatic width * * @param bool $p_state null * @return Action_Helper_Datatable */ public function toggleAutomaticWidth($p_state = null) { if(!is_null($p_state)) $this->iOptions['bAutoWidth'] = $p_state; // return this for chaining mechanism return $this; } /** * Set custom widths * * @param array|bool $p_widths * @return Action_Helper_Datatable */ public function setWidths($p_widths = false) { $this->toggleAutomaticWidth(false); $this->setHeader('sWidth', $p_widths); // return this for chaining mechanism return $this; } /** * Set body properties * * @param string $p_columnProperty * @param array $p_values * @return Action_Helper_Datatable */ public function setBody($p_columnProperty, array $p_values = array()) { if(count($p_values)) { foreach($p_values as $key => $value) { if(is_string($key)) $key = $this->colsIndex[$key]; $this->iOptions['aoColumns'][$key][$p_columnProperty] = $value; } } // return this for chaining mechanism return $this; } /** * Set visibility * * @param array|bool $p_value * @return Action_Helper_Datatable */ public function setVisible(array $p_values = array()) { $this->setBody('bVisible', $p_values); // return this for chaining mechanism return $this; } /** * Set custom widths * * @param array|bool $p_value * @return Action_Helper_Datatable */ public function setDataProp(array $p_values = array()) { $this->setBody('mData', $p_values); // return this for chaining mechanism return $this; } /** * Set header properties * * @param string $p_columnProperty * @param array $p_values * @return Action_Helper_Datatable */ public function setHeader($p_columnProperty, array $p_values = array()) { if(count($p_values)) { foreach($p_values as $key => $value) { if(is_string($key)) $key = $this->colsIndex[$key]; $this->iOptions['aoColumnDefs'][$key][$p_columnProperty] = $value; } } // return this for chaining mechanism return $this; } /** * Set header style classes * * @param array $p_values * @return Action_Helper_Datatable */ public function setClasses(array $p_values = array()) { $this->setHeader('sClass',$p_values); // return this for chaining mechanism return $this; } /** * Set handle * * @param Closure $handle * @return Action_Helper_Datatable */ public function setHandle(Closure $handle) { $this->handle = $handle; // return this for chaining mechanism return $this; } /** * Dispatch table * * @return void */ public function dispatch() { $view = $this->getActionController()->initView(); $params = $this->getRequest()->getParams(); if (empty($params['format'])) { // render table $view->iOptions = $this->iOptions; $view->cols = $this->cols; return; } // get data $rows = array(); $handle = $this->handle; $data = $this->dataSource->getData($params, $this->cols); foreach ($data as $entity) { $rows[] = $handle($entity); } // set data $view->iTotalRecords = $this->dataSource->getCount(); $view->iTotalDisplayRecords = $this->dataSource->getCount($params, $this->cols); $view->aaData = $rows; $view->sEcho = !empty($params['sEcho']) ? $params['sEcho'] : 0; } } ================================================ FILE: newscoop/application/controllers/helpers/Em.php ================================================ getEntityManager(); } /** * Set entity manager * * @param Doctrine\ORM\EntityManager * @return Action_Helper_Em */ public function setEntityManager(EntityManager $em) { $this->em = $em; return $this; } /** * Get entity manager * * @return Doctrine\ORM\EntityManager */ public function getEntityManager() { if ($this->em === NULL) { $controller = $this->getActionController(); $bootstrap = $controller->getInvokeArg('bootstrap'); $doctrine = $bootstrap->getResource('doctrine'); $this->setEntityManager($doctrine->getEntityManager()); } return $this->em; } /** * Get entity repository * * @params string $entity * @return Doctrine\ORM\EntityRepository */ public function getRepository($entity) { return $this->getEntityManager()->getRepository((string) $entity); } } ================================================ FILE: newscoop/application/controllers/helpers/Entity.php ================================================ getManager(); return $this; } /** * Set entity manager * * @param Doctrine\ORM\EntityManager * @return Action_Helper_Entity */ public function setManager(EntityManager $em) { $this->em = $em; return $this; } /** * Get entity manager * * @return Doctrine\ORM\EntityManager */ public function getManager() { if ($this->em === NULL) { $this->setManager(Zend_Registry::get('container')->getService('em')); } return $this->em; } /** * Get entity repository * * @params mixed $entity * @return Doctrine\ORM\EntityRepository */ public function getRepository($entity) { return $this->em->getRepository($this->getClassName($entity)); } /** * Flush entity manager * * @return void */ public function flushManager() { $this->em->flush(); } /** * Get entity by parameter * * @param mixed $entity * @param string $key * @param bool $throw * @return object|NULL */ public function get($entity, $key = 'id', $throw = TRUE) { $params = $this->getRequest()->getParams(); if (!isset($params[$key])) { if ($throw) { throw new InvalidArgumentException; } return NULL; } $match = $this->em->find($this->getClassName($entity), $params[$key]); if (!$match) { if ($throw) { throw new InvalidArgumentException; } return NULL; } return $match; } /** * Find entity * * @param string $entity * @param mixed $key * @return object */ public function find($entity, $key) { return $this->em->find($entity, $key); } /** * Direct strategy * * @param mixed $entity * @param string $key * @param bool $throw * @return object|NULL */ public function direct($entity, $key, $throw = TRUE) { return $this->get($entity, $key, $throw); } /** * Get entity name * * @param mixed $entity * @return string */ private function getClassName($entity) { return is_object($entity) ? get_class($entity) : (string) $entity; } } ================================================ FILE: newscoop/application/controllers/helpers/Form.php ================================================ getService('newscoop_newscoop.themes_service'); $this->basePath = $themesService->getThemePath(); } /** * Get form by given name * * @param string $name * @return Zend_Form */ public function direct($name) { $className = ucfirst($name); $themeForm = APPLICATION_PATH . '/../themes/' . $this->basePath . 'forms/' . $className . '.php'; if (file_exists($themeForm)) { include_once($themeForm); $class = sprintf(self::MASK_THEME, $className); } else { $class = sprintf(self::MASK_APP, $className); } return new $class; } } ================================================ FILE: newscoop/application/controllers/helpers/GenericDatatable.php ================================================ setAdapter( is_null( $p_adapter ) ? new DefaultAdapter() : $p_adapter ) // ->setOutputObject( $this->getActionController()->view ); return $this; } public function dispatch( $p_params = null, $p_cols = null, $p_options = null ) { $req = $this->getRequest(); if( !$this->_hasDataMap ) $this->setDataMap(); $this->_isDispatched = true; if( $req->getParam( 'format' ) == 'json' ) { $this->dispatchData( $p_params, $p_cols ); return false; } $this->dispatchMedatata( $p_params, $p_options ); return $this->_outputObject->render( $this->viewPath ); } public function setParams( $p_params ) { if( @is_array( $p_params ) ) { $sort = array(); foreach( $p_params as $k => $v ) { if( strpos( $k , 'iSortCol' ) !== false ) { $sort[ $v ] = $p_params[ str_replace( 'iSortCol', 'sSortDir', $k ) ]; } if( strpos( $k, 'sSearch' ) !== false ) { $searchCol = ( $colIdxPosMark = strrpos( $k, '_' ) ) ? substr( $k, strrpos( $k, '_' )+1 ) : -1; $search[ $searchCol ] = $v; } } } parent::setParams(array( 'search' => isset($search) ? $search : NULL, 'sort' => isset($sort) ? $sort : NULL, )); } /** * Set header properties * @param string $p_columnProperty * @param array $p_values * @return Action_Helper_GenericDatatable */ public function setHeader( $p_columnProperty, array $p_values = array() ) { if( count( $p_values ) ) { foreach( $p_values as $key => $value ) { if( is_string( $key ) ) { $key = $this->_colsIndex[$key]; } $this->_options['aoColumnDefs'][$key][$p_columnProperty] = $value; } } return $this; } /** * Set body properties * * @param string $p_columnProperty * @param array $p_values * @return Action_Helper_GenericDatatable */ public function setBody( $p_columnProperty, array $p_values = array() ) { if( count( $p_values ) ) { foreach( $p_values as $key => $value ) { if( is_string( $key ) ) $key = $this->_colsIndex[$key]; $this->_options['aoColumns'][$key][$p_columnProperty] = $value; } } return $this; } /** * N-a sti nimeni */ public function buildColumnDefs() { foreach( $this->_colsIndex as $key => $value ) { $this->_options['aoColumnDefs'][] = array( 'aTargets' => array( $value ) ); } return $this; } /** * Set header style classes * * @param array $p_values * @return Action_Helper_GenericDatatable */ public function setClasses( array $p_values = array() ) { $this->setHeader( 'sClass', $p_values ); return $this; } /** * Set sorting columns * * @param array $nonsorting * @return Action_Helper_GenericDatatable */ public function setSorting( array $p_sorting = array() ) { $this->setHeader( 'bSortable', $p_sorting ); return $this; } /** * Set custom widths * * @param array|bool $p_widths * @return Action_Helper_GenericDatatable */ public function setWidths( $p_widths = false ) { //$this->toggleAutomaticWidth( false ); $this->setHeader( 'sWidth', $p_widths ); return $this; } /** * Set data mapping * * @param array|bool $p_values * @return Action_Helper_GenericDatatable */ public function setDataMap( array $p_values = array() ) { if( !count( $p_values ) ) { foreach( $this->_colsIndex as $k => $v ) { $p_values[$k] = null; } } $this->setBody( 'mData', $p_values ); $this->_hasDataMap = true; return $this; } public function __toString() { return ''; } } ================================================ FILE: newscoop/application/controllers/helpers/Log.php ================================================ getLogger(); } /** * Set Logger * * @param Zend_Log * @return Action_Helper_Log */ public function setLogger(Zend_Log $logger) { $this->logger = $logger; return $this; } /** * Get Logger * * @return Zend_Log */ public function getLogger() { if ($this->logger === NULL) { // $controller = $this->getActionController(); $this->setLogger(Zend_Registry::get('log')); /* $bootstrap = $controller->getInvokeArg('bootstrap'); $this->setLogger($bootstrap->getResource('Log')); */ } return $this->logger; } /** * Direct strategy * * @params string $message * @params int $severity * @return void */ public function direct($message, $severity = Zend_Log::INFO, $extra = NULL) { $this->getLogger()->log((string) $message, (int) $severity, $extra); } } ================================================ FILE: newscoop/application/controllers/helpers/Newsletter.php ================================================ addElement('checkbox', 'subscriber', array( 'label' => 'I want to receive newsletter', )); foreach ($list->groups as $group) { $type = $group['form_field'] == 'radio' ? 'radio' : 'multiCheckbox'; $newsletter->addElement($type, $group['name'], array( 'label' => $group['name'], 'multioptions' => $group['groups'], )); } if ($member !== null) { $newsletter->setDefaults(array_merge((array) $member, $member->groups)); } $form->addSubForm($newsletter, 'newsletter'); } } ================================================ FILE: newscoop/application/controllers/helpers/Plupload.php ================================================ getRequest(); if ($request->getParam('plupload', false)) { Plupload::OnMultiFileUpload(CS_TMP_TPL_DIR); } return $this; } /** * @return array */ public function direct() { return $this->getUploadedFiles(); } /** * Get uploaded files * * @return array */ public function getUploadedFiles() { $request = $this->getRequest(); $count = (int) $request->getParam('uploader_count', 0); $files = array(); if ($request->isPost() && $count) { for ($i = 0; $i < $count; $i++) { $tmpnameId = "uploader_{$i}_tmpname"; $nameId = "uploader_{$i}_name"; $statusId = "uploader_{$i}_status"; if ($request->getParam($statusId) == 'done') { $files[$request->getParam($nameId)] = CS_TMP_TPL_DIR . '/' . $request->getParam($tmpnameId); } } } return $files; } } ================================================ FILE: newscoop/application/controllers/helpers/Service.php ================================================ container = \Zend_Registry::get('container'); } /** * Get service * * @param string $service * @return mixed */ public function getService($service) { if (!$this->container->hasService($service)) { throw new InvalidArgumentException("Service '$service' not found"); } return $this->container->getService($service); } /** * Direct get service * * @param string $service * @return mixed */ public function direct($service) { return $this->getService($service); } } ================================================ FILE: newscoop/application/controllers/helpers/Sidebar.php ================================================ getActionController(); $view = $controller->view; if (!empty($config['resource'])) { // check acl $acl = $controller->getHelper('acl'); if (!$acl->isAllowed($config['resource'], $config['privilege'])) { return; } } // get config $params = $this->getRequest()->getParams(); $config = array_merge($params, $config); ob_start(); echo !empty($config['label']) ? '

        ' . $config['label'] . "

        \n" : ''; echo $view->action($config['action'], $config['controller'], $config['module'], $config); $content = ob_get_clean(); $method = $prepend ? 'prepend' : 'append'; $view->placeholder(self::SIDEBAR)->$method($content); } /** * Direct strategy * * @param array $config * @param bool $prepend * @return void */ public function direct(array $config, $prepend = false) { $this->addSidebar($config, $prepend); } } ================================================ FILE: newscoop/application/controllers/helpers/Smarty.php ================================================ getService('newscoop_newscoop.themes_service'); $controller = $this->getActionController(); $GLOBALS['controller'] = $controller; $request = $this->getRequest(); if ($request->getParam('language') == false) { $locale = \Zend_Controller_Front::getInstance()->getParam('locale'); if (!empty($locale)) { $request->setParam('language', $locale); } } $format = $request->getParam('format', null); if (isset($format) && $format == "json") { return; } if (!in_array($request->getParam('module', 'default'), $this->modules) || !array_key_exists('module', $request->getParams())) { return; } $themePath = $themesService->getThemePath(); $controller->view = new Newscoop\SmartyView(); $controller->view ->addScriptPath(APPLICATION_PATH . '/views/scripts/') ->addScriptPath(realpath(APPLICATION_PATH . "/../themes/$themePath")); $controller->view->addPath(realpath(APPLICATION_PATH . "/../themes/$themePath")); $controller->getHelper('viewRenderer') ->setView($controller->view) ->setViewScriptPathSpec(':controller_:action.:suffix') ->setViewSuffix('tpl'); $controller->getHelper('layout') ->disableLayout(); // reverse templates directory order \CampTemplate::singleton()->setTemplateDir(array_reverse(\CampTemplate::singleton()->getTemplateDir())); } } ================================================ FILE: newscoop/application/forms/Confirm.php ================================================ getService('translator'); $this->addElement('text', 'first_name', array( 'label' => $translator->trans('First Name', array(), 'users').'*:', 'required' => true, 'filters' => array('stringTrim'), )); $this->getElement('first_name')->setOrder(1); $this->addElement('text', 'last_name', array( 'label' => $translator->trans('Last Name', array(), 'users').'*:', 'required' => true, 'filters' => array('stringTrim'), )); $this->getElement('last_name')->setOrder(2); $this->addElement('text', 'username', array( 'label' => $translator->trans('Username', array(), 'users').'*:', 'required' => true, 'filters' => array('stringTrim'), )); $this->getElement('username')->setOrder(3); $this->addElement('file', 'image', array( 'label' => $translator->trans('Profile image', array(), 'users'), 'maxfilesize' => $this->getMaxFileSize(), 'validators' => array( 'isImage', ), )); $this->getElement('username')->setOrder(4); $this->addElement('password', 'password', array( 'label' => $translator->trans('Password').'*:', 'required' => true, 'filters' => array('stringTrim'), 'validators' => array( array('stringLength', false, array(6, 80)), ), )); $this->getElement('password')->setOrder(5); $form = $this; $this->addElement('password', 'password_confirm', array( 'label' => $translator->trans('Password Confirmation', array(), 'users').'*:', 'required' => true, 'filters' => array('stringTrim'), 'validators' => array( new Zend_Validate_Callback(function ($value, $context) { return $value == $context['password']; }), ), 'errorMessages' => array($translator->trans("Password confirmation does not match your password.", array(), 'users')), )); $this->getElement('password_confirm')->setOrder(6); $this->addElement('checkbox', 'terms_of_use', array( 'label' => $translator->trans('Accepting terms of use', array(), 'users'), 'required' => true, 'validators' => array( array('greaterThan', true, array('min' => 0)), ), 'errorMessages' => array($translator->trans('You must accept the terms of use.', array(), 'users')), )); $this->getElement('terms_of_use')->setOrder(7); $this->addElement('submit', 'submit', array( 'label' => $translator->trans('Login'), 'ignore' => true, )); $this->getElement('submit')->setOrder(8); $this->addElement('hidden', '_target_path', array( 'decorators' => array('ViewHelper') )); $this->getElement('_target_path')->setOrder(9); } /** * Get max file size * * @return int */ public function getMaxFileSize() { $preferencesService = \Zend_Registry::get('container')->getService('system_preferences_service'); $maxFileSize = $preferencesService->MaxProfileImageFileSize ?: ini_get('upload_max_filesize'); return camp_convert_bytes($maxFileSize); } } ================================================ FILE: newscoop/application/forms/Contact.php ================================================ addElement('text', 'first_name', array( 'label' => 'First Name', 'filters' => array('stringTrim'), )); $this->addElement('text', 'last_name', array( 'label' => 'Last Name', 'filters' => array('stringTrim'), )); $this->addElement('text', 'email', array( 'label' => 'Email', 'required' => true, 'filters' => array('stringTrim'), )); $this->addElement('select', 'subject', array( 'label' => 'Subject', 'registerInArrayValidator' => FALSE, )); $this->addElement('textarea', 'message', array( 'label' => 'Message', 'required' => true, )); $secretConfigFile = APPLICATION_PATH . '/configs/secret.ini'; if (file_exists($secretConfigFile)) { $config = new \Zend_Config_Ini($secretConfigFile, APPLICATION_ENV); $this->addElement('captcha', 'captcha', array( 'label' => "Please verify you're a human", 'captcha' => array( 'ReCaptcha', ), )); $this->captcha->getCaptcha()->setPubkey($config->get('recaptcha')->get('public_key')); $this->captcha->getCaptcha()->setPrivkey($config->get('recaptcha')->get('private_key')); } $this->addElement('submit', 'submit', array( 'label' => 'Send', 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/Login.php ================================================ addElement('hidden', '_target_path', array( 'value' => $_SERVER['REQUEST_URI'], )); $this->addElement('text', 'email', array( 'label' => 'Email', 'required' => true, 'filters' => array( 'stringTrim', ), )); $this->addElement('password', 'password', array( 'label' => 'Password', 'required' => true, 'filters' => array( 'stringTrim', ), )); $this->addElement('submit', 'submit', array( 'label' => 'Sign In', 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/PasswordRestore.php ================================================ addElement('text', 'email', array( 'label' => 'E-mail', 'required' => true, 'filters' => array( 'stringTrim', ), )); $this->addElement('submit', 'submit', array( 'label' => 'Restore password', 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/PasswordRestorePassword.php ================================================ addElement('password', 'password', array( 'label' => 'Password', 'required' => true, 'filters' => array('stringTrim'), 'validators' => array( array('stringLength', false, array(6, 80)), ), )); $this->addElement('password', 'password_confirm', array( 'label' => 'Password Confirmation', 'required' => true, 'filters' => array('stringTrim'), 'validators' => array( new Zend_Validate_Callback(function ($value, $context) { return $value == $context['password']; }), ), 'errorMessages' => array("Password confirmation does not match your password."), )); $this->addElement('submit', 'submit', array( 'label' => 'Set password', 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/Profile.php ================================================ getService('translator'); $this->setAttrib('enctype', 'multipart/form-data'); $this->addElement('text', 'first_name', array( 'label' => $translator->trans('First Name', array(), 'users'), 'filters' => array('stringTrim'), )); $this->addElement('text', 'last_name', array( 'label' => $translator->trans('Last Name', array(), 'users'), 'filters' => array('stringTrim'), )); $this->addElement('text', 'username', array( 'label' => $translator->trans('Username', array(), 'users'), 'filters' => array('stringTrim'), 'required' => true, )); $this->addElement('password', 'password', array( 'label' => $translator->trans('Password'), )); $this->addElement('file', 'image', array( 'label' => $translator->trans('Profile image', array(), 'users'), )); $profile = new Zend_Form_SubForm(); $profile->addElement('radio', 'gender', array( 'label' => $translator->trans('Gender', array(), 'users'), 'multioptions' => array( 'male' => 'Male', 'female' => 'Female', ), )); $profile->addElement('textarea', 'bio', array( 'label' => $translator->trans('About me', array(), 'users'), 'filters' => array('stringTrim'), 'cols' => 60, 'rows' => 4, )); $profile->addElement('text', 'birth_date', array( 'label' => $translator->trans('Date of birth', array(), 'users'), 'class' => 'date', 'filters' => array('stringTrim'), )); $profile->addElement('text', 'organisation', array( 'label' => $translator->trans('Organisation', array(), 'users'), 'filters' => array('stringTrim'), )); $profile->addElement('text', 'website', array( 'label' => $translator->trans('Website', array(), 'users'), 'filters' => array('stringTrim'), )); $profile->addElement('text', 'twitter', array( 'label' => $translator->trans('Twitter', array(), 'users'), 'filters' => array('stringTrim'), )); $profile->addElement('text', 'facebook', array( 'label' => $translator->trans('Facebook', array(), 'users'), 'filters' => array('stringTrim'), )); $profile->addElement('text', 'google', array( 'label' => $translator->trans('Google+', array(), 'users'), 'filters' => array('stringTrim'), )); $profile->addElement('text', 'geolocation', array( 'label' => $translator->trans('Geolocation', array(), 'users'), 'filters' => array('stringTrim'), )); $profile->addElement('checkbox', 'first_name_public', array( 'label' => $translator->trans('First Name Public', array(), 'users'), )); $profile->addElement('checkbox', 'last_name_public', array( 'label' => $translator->trans('Last Name Public', array(), 'users'), )); $profile->addElement('checkbox', 'email_public', array( 'label' => $translator->trans('Allow sending emails', array(), 'users'), )); $this->addSubForm($profile, 'attributes'); $this->addElement('submit', 'submit', array( 'label' => $translator->trans('Save profile', array(), 'users'), 'ignore' => true, )); } public function setDefaultsFromEntity(User $user) { $defaults = array( 'first_name' => $user->getFirstName(), 'last_name' => $user->getLastName(), 'username' => $user->getUsername(), 'attributes' => array(), ); $profile = $this->getSubForm('attributes'); foreach ($profile as $field) { $defaults['attributes'][$field->getName()] = (string) $user->getAttribute($field->getName()); } $this->setDefaults($defaults); } /** * Get maximum file size in bytes * * @return int */ public function getMaxFileSize() { $preferencesService = \Zend_Registry::get('container')->getService('system_preferences_service'); $maxFileSize = $preferencesService->MaxProfileImageFileSize; if (!$maxFileSize) { $maxFileSize = ini_get('upload_max_filesize'); } return camp_convert_bytes($maxFileSize); } } ================================================ FILE: newscoop/application/forms/Register.php ================================================ getService('translator'); $this->addElement('text', 'email', array( 'label' => $translator->trans('Email', array(), 'users'), 'required' => true, 'filters' => array( 'stringTrim', ), 'validators' => array( array('emailAddress', true, array('domain' => APPLICATION_ENV !== 'development')), ), )); $this->addElement('checkbox', 'terms_of_use', array( 'label' => $translator->trans('Accepting terms of use', array(), 'users'), 'required' => true, 'validators' => array( array('greaterThan', true, array('min' => 0)), ), )); $this->addElement('submit', 'submit', array( 'label' => $translator->trans('Continue', array(), 'users'), 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/SendEmail.php ================================================ addElement('text', 'subject', array( 'label' => 'Subject', 'required' => true, 'filters' => array( 'stringTrim', ), )); $this->addElement('textarea', 'message', array( 'label' => 'Message', 'required' => true, 'columns' => 60, 'rows' => 5, )); $this->addElement('submit', 'submit', array( 'label' => 'Send email', 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/Social.php ================================================ addElement('text', 'first_name', array( 'label' => 'First Name', 'required' => true, 'filters' => array('stringTrim'), )); $this->addElement('text', 'last_name', array( 'label' => 'Last Name', 'required' => true, 'filters' => array('stringTrim'), )); $this->addElement('text', 'username', array( 'label' => 'Username', 'required' => true, 'filters' => array('stringTrim'), )); $this->addElement('text', 'email', array( 'label' => 'Email', 'required' => true, 'filters' => array('stringTrim'), 'validators' => array( array('emailAddress'), ), )); $this->addElement('submit', 'submit', array( 'label' => 'Register', 'ignore' => true, )); } } ================================================ FILE: newscoop/application/forms/Topics.php ================================================ addElement('multiCheckbox', 'topics', array( 'required' => false, )); $this->addElement('multiCheckbox', 'selected', array( 'required' => false, )); $this->addElement('hidden', 'languageId', array( 'required' => true, )); } } ================================================ FILE: newscoop/application/layouts/scripts/admin.phtml ================================================ getService('translator'); ?> headTitle(); ?> legacy) { ?> headLink(); if(!isset($headLink['table'])) $headLink->offsetSetStylesheet('table', $this->baseUrl('/admin-style/table.css')); elseif(empty($headLink['table'])) unset($headLink['table']); echo $headLink; ?> headStyle(); echo $this->headScript(); ?> placeholder('sidebar') != '' ? ' class="with-sidebar"' : ''; ?>>
        render('admin_menu.phtml'); ?> legacy ? '' : '

        '.str_replace(' - Newscoop Admin', '', $this->placeholder('Zend_View_Helper_HeadTitle')).'

        '; ?> placeholder('sidebar') != '') { ?> messages)) { ?> legacy) { camp_html_copyright_notice(); } ?> ================================================ FILE: newscoop/application/layouts/scripts/admin_menu.phtml ================================================ get('knp_menu.menu_provider')->get('main'); $breadcrumbsMenu = \Zend_Registry::get('container')->get('knp_menu.menu_provider')->get('breadcrumb'); $menuRenderer = \Zend_Registry::get('container')->get('knp_menu.renderer.list'); $manipulator = new \Knp\Menu\Util\MenuManipulator(); $breadcrumbsMenuArray = $manipulator->getBreadcrumbsArray($breadcrumbsMenu); ?> legacy) { ?> 1) {?> ================================================ FILE: newscoop/application/layouts/scripts/iframe.phtml ================================================ headTitle(); ?> getService('translator'); ?> legacy) { ?> headLink(); if(!isset($headLink['table'])) $headLink->offsetSetStylesheet('table', $this->baseUrl('/admin-style/table.css')); elseif(empty($headLink['table'])) unset($headLink['table']); echo $headLink; ?> headStyle(); echo $this->headScript(); ?>
        layout()->content; ?>
        messages)) { ?> ================================================ FILE: newscoop/application/layouts/scripts/modal.phtml ================================================ <?php echo strip_tags($this->placeholder('title')); ?> headStyle(); ?> headScript(); ?> layout()->content; ?> ================================================ FILE: newscoop/application/modules/admin/Bootstrap.php ================================================ getParameter('kernel.cache_dir').'/reset_cache'; if (file_exists($resetCachePath)) { CampCache::singleton()->clear('user'); unlink($resetCachePath); } } /** * Init doctype & view - first function using it */ protected function _initDoctype() { global $Campsite; $this->bootstrap('view'); $view = $this->getResource('view'); Zend_Registry::set('view', $view); // @todo http://framework.zend.com/manual/en/zend.application.available-resources.html $view->doctype('HTML5'); // set help url $view->helpUrl = $Campsite['site']['help_url']; // set locale $locale = isset($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : 'en'; $locale_fix = array( 'cz' => 'cs', ); $view->locale = isset($locale_fix[$locale]) ? $locale_fix[$locale] : $locale; } /** * Init page title */ protected function _initHeadTitle() { global $Campsite; $translator = Zend_Registry::get('container')->getService('translator'); $title = !empty($Campsite['site']['title']) ? htmlspecialchars($Campsite['site']['title']) : $translator->trans('Newscoop', array(), 'home') . $Campsite['VERSION']; $view = $this->getResource('view'); $view->headTitle($title) ->setSeparator(' - '); } /** * Add flash messages to view if any */ protected function _initFlashMessenger() { $flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); if ($flashMessenger->hasMessages()) { $view = $this->getResource('view'); $view->messages = $flashMessenger->getMessages(); } //$view->getHelper( 'FlashMsg' )->setAdapter( Zend_Controller_Action_HelperBroker::getStaticHelper( 'FlashMessenger' ) ); } /** * Init view placeholders */ protected function _initPlaceholders() { $this->bootstrap('view'); $this->_view = $view = $this->getResource('view'); // content title $view->placeholder('title') ->setPrefix('

        ') ->setPostfix('

        '); // content sidebar // not using prefix/postfix to detect if is empty $view->placeholder('sidebar') ->setSeparator('
        " placeholder="trans('Video URL', array(), 'article_images'); ?>" />
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/image/article-attach.phtml ================================================ getService('translator'); ?> headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); ?> headLink()->appendStylesheet($this->baseUrl('/js/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css')); ?> headLink()->appendStylesheet($this->baseUrl('/admin-style/admin_stylesheet.css')); ?> headLink()->appendStylesheet($this->baseUrl('/js/select2/select2.css')); ?> placeholder('bodyId')->set('next'); ?>
         
        articleImages)) { ?>
          articleImages as $articleImage) { ?>
        • thumbnail($articleImage, 75, 75, 'fit')->getImg($this); ?>
           

        trans('No images attached to article.', array(), 'article_images'); ?>

        trans('Specify image url if you want to load it.', array(), 'article_images'); ?>
        newsfeed) { ?>value="on" checked="checked" value="off" name="with_newsfeeds" id="with_newsfeeds">

        images)) { ?>
        paginator; ?>
          images as $image) { ?>
        • thumbnail($image, 150, 150, 'fit')->getImg($this); ?>
           

        trans('No images found.', array(), 'article_images'); ?>

        ================================================ FILE: newscoop/application/modules/admin/views/scripts/image/article.phtml ================================================ getService('translator'); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/renditions.css')); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/modal-custom.css')); ?> placeholder('bodyId')->set('next'); ?>
          renditions as $rendition) { ?>
        • rendition($rendition, $this->previewWidth, $this->previewHeight, $this->articleRenditions[$rendition]); ?>

        trans("Attached images", array(), 'article_images'); ?>

        images)) { ?>
          images)) { ?> images as $image) { ?>
        • thumbnail($image, 120, 90, 'fit')->getImg($this); ?>
          isDefault()) { echo 'checked="checked"'; } ?> title="trans('Set as default', array(), 'article_images'); ?>" />
        • trans('No images attached to article.', array(), 'article_images'); ?>

        images)) { ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/image/edit-image-data.phtml ================================================ getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('preferences'); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); ?> placeholder('bodyId')->set('next'); ?>
         
        images)) { ?>
          images as $image) { ?>
        • thumbnail($image, 150, 150, 'fit')->getImg($this); ?>

          MediaRichTextCaptions == 'Y') { $languageSelectedObj = new Language((int) camp_session_get('LoginLanguageId', 0)); $editorLanguage = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : $languageSelectedObj->getCode(); $loadAsRichtext[] = 'image_description_'.$image->getId().'_tinymce'; ?>




        0) { $editorOptions = array( 'max_chars' => $preferencesService->MediaCaptionLength, 'toolbar_length' => 16, ); editor_load_tinymce($loadAsRichtext, $this->currentUser, $editorLanguage, $editorOptions); } ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/image/edit.phtml ================================================ getService('translator'); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/renditions.css')); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/modal-custom.css')); ?> placeholder('bodyId')->set('next'); ?>
        imageEditor($this->rendition, $this->image); ?> rendition->isCrop()) { ?>
        currentRendition = $this->rendition; ?>
          renditions as $rendition) { ?> getName() === $this->currentRendition->getName() ? ' class="active"' : ''; ?>>rendition($rendition, $this->previewWidth, $this->previewHeight, $this->articleRenditions[$rendition]); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/image/editor.phtml ================================================ getService('translator'); $this->headLink()->appendStylesheet($this->baseUrl('/js/tapmodo-Jcrop-5e58bc9/css/jquery.Jcrop.css')); ?> headScript()->appendFile($this->baseUrl('/js/tapmodo-Jcrop-5e58bc9/js/jquery.Jcrop.min.js')); ?>

        escape(ucfirst($this->rendition->getName())); ?>: rendition->getSpecs())); ?> rendition->getWidth(), 'x', $this->rendition->getHeight(); ?> (trans('original size:', array(), 'article_images'); ?> image->getWidth(), 'x', $this->image->getHeight(); ?>)

        thumbnail($this->image->getPath(), $this->rendition->getWidth(), $this->rendition->getHeight(), $this->rendition->isCrop() ? 'fill' : $this->rendition->getSpecs())->getImg($this); ?>
        rendition->isCrop()) { ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/image/rendition.phtml ================================================ getService('translator'); ?>
        escape($this->rendition->getLabel()); ?>
        rendition->getSpecs()); echo array_shift($specs); ?> rendition->getWidth(), 'x', $this->rendition->getHeight(); ?>
        isDefault) { ?> trans('Use default', array(), 'article_images'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/languages/add.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Add Language', array(), 'languages').' - Newscoop Admin', 'SET'); ?> form->render(); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/languages/edit.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Edit language: $1', array('$1' => $this->escape($this->language->getName())), 'languages').' - Newscoop Admin', 'SET'); ?> renderError(); ?> form->setAction($this->url())->setMethod('post')->render(); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/languages/index.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Languages').' - Newscoop Admin', 'SET'); ?> renderActions(); ?> languages)) { // no languages $this->renderMessage($translator->trans('No languages.')); return; } ?> languages as $language) { ?>
        trans('Language'); ?> trans('Native name', array(), 'languages'); ?> trans('Code'); ?> trans('Code'); ?> trans('Delete'); ?>
        escape($language->getName()); ?> escape($language->getNativeName()); ?> escape($language->getCode()); ?> escape($language->getRFC3066bis()); ?> getCode() !== 'en') { ?> trans('Delete'); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/legacy/index.phtml ================================================ ================================================ FILE: newscoop/application/modules/admin/views/scripts/link-ban.phtml ================================================ attributes as $key => $value):?> = "" > name; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/link-delete.phtml ================================================ attributes as $key => $value):?> = "" > name; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/link-edit.phtml ================================================ attributes as $key => $value):?> = "" > name; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/log/index.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Logs').' - Newscoop Admin', 'SET'); ?> renderFilter($this->form); ?> events)) { // no logs $this->renderMessage($translator->trans('No logs.', array(), 'logs')); return; } ?> renderPager($this->pager); ?> events as $event) { ?>
        trans('Logs'); ?>
        trans('Date/Time'); ?> trans('Resource Type', array(), 'logs'); ?> trans('Action'); ?> trans('Resource', array(), 'logs'); ?> trans('Title', array(), 'logs'); ?> trans('Diff', array(), 'logs'); ?> trans('User', array(), 'logs'); ?>
        getCreated()->format('Y-m-d H:i:s'); ?> getResourceType(); ?> getAction(); ?> getResourceId(); echo(''. $translator->trans('show', array(), 'logs') .''); echo(''); echo(''); if (is_array($resource_id)) { foreach ($resource_id as $key => $value) { if(is_array($value)){ $value = 'array'; } else { $value = $value; } echo(''); } } else { echo(''); } echo(''); ?> getResourceTitle(); ?> getResourceDiff(); echo(''. $translator->trans('show', array(), 'logs') .''); echo(''); echo(''); if (is_array($resource_diff)) { foreach ($resource_diff as $key => $value) { if(is_array($value)){ $value = serialize($array); } else { $value = $value; } echo(''); } } else { echo(''); } echo(''); ?> getUser()){ echo $event->getUser()->getUsername(); } ?>
        renderPager($this->pager); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/media/list-images.phtml ================================================ getService('translator'); echo $this->paginator; ?> images)) { ?>
          images as $image) { ?>
        • thumbnail($image, 150, 150, 'fit')->getImg($this); ?>
          getDescription(); ?> (getWidth(), 'x', $image->getHeight(); ?>)
        trans('No images', array(), 'article_images'); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/media/list-slideshows.phtml ================================================ + Create slideshow ================================================ FILE: newscoop/application/modules/admin/views/scripts/message.phtml ================================================

        message; ?>

        ================================================ FILE: newscoop/application/modules/admin/views/scripts/news-item.phtml ================================================ item->getContentSet()->getInlineContent()) { ?>
        item->getContentSet()->getInlineContent()); ?>
        item->getContentSet()->getRemoteContent('rend:viewImage')) { ?>
        item->getContentSet()->getRemoteContent() as $remoteContent) { ?> getRendition() === 'rend:baseImage') { ?> getWidth(), 'x', $remoteContent->getHeight(); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/package/item.phtml ================================================
      • action('rendition', 'image', 'admin', array( 'rendition' => $this->item->getRendition(), 'image' => $this->item->getImage(), 'width' => 100, 'height' => 100, )); ?> Remove
      • ================================================ FILE: newscoop/application/modules/admin/views/scripts/package-item-group.phtml ================================================ group->getRole(); ?>
          group->getRefs() as $ref) { ?>
        • renderPackageItemGroup($this->item->getGroupSet()->getGroup($ref), $this->item); ?> item->getFeed()->getItem($ref->getResidRef()); ?> getContentMeta()->getHeadline(); ?> getContentSet()->getInlineContent() && $thumbnail = $item->getContentSet()->getRemoteContent('rend:thumbnail')) { ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/package-item.phtml ================================================
          item->getGroupSet()->getRootGroup()->getRefs() as $rootRef) { ?>
        • renderPackageItemGroup($this->item->getGroupSet()->getGroup($rootRef), $this->item); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/pager.phtml ================================================
        pager->render(); ?>  
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/paginator-hash.phtml ================================================ getService('translator'); ?> pageCount): ?>
        previous)): ?> trans('First', array(), 'home'); ?> | trans('First', array(), 'home'); ?> | previous)): ?> < trans('Previous'); ?> | < trans('Previous'); ?> | next)): ?> trans('Next'); ?> > | trans('Next'); ?> > | next)): ?> trans('Last', array(), 'home'); ?> trans('Last', array(), 'home'); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/paginator-template.phtml ================================================ ================================================ FILE: newscoop/application/modules/admin/views/scripts/paginator.phtml ================================================ getService('translator'); ?> pageCount): ?>
        previous)): ?> trans('First', array(), 'home'); ?> | trans('First', array(), 'home'); ?> | previous)): ?> < trans('Previous'); ?> | < trans('Previous'); ?> | next)): ?> trans('Next'); ?> > | trans('Next'); ?> > | next)): ?> trans('Last', array(), 'home'); ?> trans('Last', array(), 'home'); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/plupload.phtml ================================================ getService('translator'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/rendition/index.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Reload renditions', array(), 'article_images').' - Newscoop Admin', 'SET'); ?> renditions) === 0) { echo '

        ', $translator->trans('No renditions defined.', array(), 'article_images'), '

        '; return; } ?>
          renditions as $rendition) { ?>
        • escape($rendition->getName()); ?> getSpecs(); ?> getWidth(), 'x', $rendition->getHeight(); ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/rendition/preview.phtml ================================================
        thumbnail !== null) { echo $this->thumbnail->getImg($this); } ?>
        ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/add-video-item.phtml ================================================ form; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/attach.phtml ================================================ getService('translator'); $this->headScript()->appendFile($this->baseUrl('js/views/PaginatorView.js')); ?>

        trans('Attached Slideshows', array(), 'article_images'); ?>

            render('paginator-template.phtml'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/create.phtml ================================================ headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); ?> headLink()->appendStylesheet($this->baseUrl('/admin-style/slideshow.css')); ?> getService('translator'); $this->placeholder('bodyId')->set('next'); $this->placeholder('bodyClass')->set('iframe expanded'); ?>
            form->headline->getMessages()) : $translator->trans('Slideshow name...', array(), 'article_images'); ?>"/> form->rendition->setDecorators(array( 'ViewHelper', 'Errors', 'Label' )); ?>

            trans('Slideshow images', array(), 'article_images'); ?>

            trans('Add items to slideshow', array(), 'article_images'); ?>
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/edit-item.phtml ================================================ headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); $this->headLink()->appendStylesheet($this->baseUrl('/admin-style/slideshow.css')); $translator = \Zend_Registry::get('container')->getService('translator'); $preferencesService = \Zend_Registry::get('container')->getService('preferences'); // Load tinymce for richtext editor require_once($GLOBALS['g_campsiteDir']."/admin-files/media-archive/editor_load_tinymce.php"); ?> placeholder('bodyId')->set('next'); $this->placeholder('bodyClass')->set('iframe'); ?>
            item->isVideo()) { ?> style="padding-left: 55px;" class="editarea">
            item->isVideo()) { ?>

            Video: item->getVideoUrl(); ?>

            item->isImage() ? $this->imageEditor($this->rendition, $this->image) : $this->videoPreview($this->item->getVideoUrl(), $this->rendition->getWidth(), $this->rendition->getHeight()); ?> item->isVideo()) { ?> MediaRichTextCaptions == 'Y') { $languageSelectedObj = new Language((int) camp_session_get('LoginLanguageId', 0)); $editorLanguage = !empty($_COOKIE['TOL_Language']) ? $_COOKIE['TOL_Language'] : $languageSelectedObj->getCode(); $editorOptions = array( 'max_chars' => $preferencesService->MediaCaptionLength, 'toolbar_length' => 24, ); $fieldID = 'caption_'.$this->item->getId(); editor_load_tinymce($fieldID, $this->currentUser, $editorLanguage, $editorOptions); ?>
            package->getPrev($this->item)) !== null) { ?> package->getNext($this->item)) !== null) { ?>
            currentItem = $this->item; ?>
              item->getPackageItems() as $item) { ?> slideshowItem($item, $this->currentItem); ?>
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/edit.phtml ================================================ headLink()->appendStylesheet($this->baseUrl('/admin-style/image_management.css')); ?> headLink()->appendStylesheet($this->baseUrl('/admin-style/slideshow.css')); ?> getService('translator'); $this->placeholder('bodyId')->set('next'); $this->placeholder('bodyClass')->set('iframe expanded'); ?>
            form->headline->getMessages()) : $translator->trans('Slideshow headline', array(), 'article_images'); ?>" />

            trans('Slideshow images', array(), 'article_images'); ?>

              slideshow->getItems() as $item) { ?> slideshowItem($item); ?>
            trans('Add items to slideshow', array(), 'article_images'); ?>
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/item-preview.phtml ================================================
            itemHelper->isImage() ? $this->renditionPreview($this->itemHelper->getRendition(), 75, 75, $this->itemHelper->getImage()) : $this->videoPreview($this->itemHelper->getVideoUrl(), 75, 75); ?>
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/item.phtml ================================================ getService('translator'); $preferenceService = \Zend_Registry::get('container')->getService('preferences'); ?>
          • current !== null && $this->current->getId() === $this->item->getId() ? ' class="active"' : ''; ?>>
            item->isImage() ? $this->renditionPreview($this->item->getRendition(), 150, 150, $this->item->getImage()) : $this->videoPreview($this->item->getVideoUrl()); ?>
            item->getCaption()) { if ($preferenceService->MediaRichTextCaptions == 'Y') { echo $this->item->getCaption(); } else { echo $this->escape($this->item->getCaption()); } } else { echo $translator->trans('no caption', array(), 'article_images'); } ?>
            trans('Remove'); ?>
          • ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/slideshow.phtml ================================================ getService('translator'); ?>
            escape($this->helperSlideshow->getHeadline()); ?> (helperSlideshow->getItemsCount(), ' ', $this->translate(array( $translator->trans('Item', array(), 'article_images'), $translator->trans('Items', array(), 'article_images'), $this->helperSlideshow->getItemsCount(), )); ?>)
            helperSlideshow->getItems() as $item) { ?> >slideshowItemPreview($item); ?>
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/vimeo-preview.phtml ================================================
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow/youtube-preview.phtml ================================================
            ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow-attach-template.phtml ================================================ ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow-box.phtml ================================================ getService('translator'); ?>
              ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow-list.phtml ================================================ articlePage) { $this->headScript()->appendFile($this->baseUrl('js/underscore.js')); $this->headScript()->appendFile($this->baseUrl('js/backbone.js')); } ?> headScript()->appendFile($this->baseUrl('js/views/PaginatorView.js')); ?> getService('translator'); ?>
                render('paginator-template.phtml'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/slideshow-template.phtml ================================================ getService('translator'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/staff/add.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Add new staff member').' - Newscoop Admin', 'SET'); ?> form; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/staff/edit-access.phtml ================================================ jQueryUtils() ?> getService('translator'); $this->headTitle($translator->trans('Permissions: $1', $this->staff).' - Newscoop Admin', 'SET'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/staff/edit.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Change user account information').' - Newscoop Admin', 'SET'); ?> renderActions(); ?> form; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/staff/table.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Staff management').' - Newscoop Admin', 'SET'); ?> renderActions(); ?> renderDatatable(); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/support/close.phtml ================================================ ================================================ FILE: newscoop/application/modules/admin/views/scripts/support/index.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Support Feedback', array(), 'support').' - Newscoop Admin', 'SET'); ?>

                trans('Help Newscoop improve by letting us know you are using it. This info will be collected regularly in order to improve your user experience.', array(), 'support')); ?>

                trans('Show feedback data to be sent', array(), 'support')); ?>

                action)) { ?> trans('Current status: ', array(), 'support')); ?> support_send) { echo($translator->trans('You are sending daily statistics.', array(), 'support')); } else { echo($translator->trans('You are NOT sending daily statistics.', array(), 'support')); } ?>

                trans('By clicking on the Yes, help Newscoop button, I agree to the Sourcefabric privacy policy', array(), 'support'); ?> http://www.sourcefabric.org/en/about/policy/

                ">
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/template/edit-image.phtml ================================================
                replaceForm->setAttrib('class', 'replace'); ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/template/edit-other.phtml ================================================
                replaceForm->setAttrib('class', 'replace'); ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/template/edit-template.phtml ================================================ form->content->setAttrib('id', 'template-edit-area'); ?>
                Replace existing template

                You can replace the existing template with a new one of your choice. Browse below for a new template on your local disc, and Replace to apply the change.

                replaceForm->getElement('file'); ?>
                form->getElement('csrf'); ?> form->getElement('content'); ?>
                Geofiltering
                form->getElement('geo_filtering'); ?>
                Cache lifetime
                form->getElement('cache_lifetime'); ?>
                form->getElement('submit'); ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/template/index.phtml ================================================ getService('translator'); ?>
                trans('Current directory:', array(), 'themes'); ?> path)) : ?> trans('Templates', array(), 'themes'); ?> trans('Templates', array(), 'themes'); ?> / navigation()->breadcrumbs() ->setContainer($this->nav) ->setMinDepth(0) ->setSeparator(' / '); ?>
                renderActions(); ?>
                form->csrf; ?> form->action; ?> form->name; ?> form->multiaction; ?> doCache) : ?> trans('Caching templates in:', array(), 'themes') ?>
                path)) : ?> folders as $folder) : ?> templates as $file) : ?>
                trans('File name', array(), 'themes'); ?> trans('Type'); ?> trans('File size', array(), 'themes'); ?> trans('Cache Lifetime', array(), 'themes'); ?> trans('Last modified', array(), 'themes'); ?>
                trans('Go to parent', array(), 'themes'); ?>
                $folder->name), 'themes'); ?>">name; ?> dir -1
                $file->name), 'themes'); ?>">name; ?> type; ?> formatBytes($file->size); ?> id) ? $file->ttl : ''; ?> dateFormat, $file->ctime); ?> size; ?>
                moveForm->name; ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/template/upload.phtml ================================================ getService('translator'); $this->headTitle($translator->trans('Upload', array(), 'themes').' - Newscoop Admin', 'SET'); ?> isWritable) { echo $this->renderError($translator->trans("$1 is not writable", array('$1' => $this->path), 'themes')); return; } ?> form; ?> plupload(); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/test/index.phtml ================================================ text; ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/test/test-api-follow.phtml ================================================

                url ?>

                  result) || is_object($this->result) ) foreach( $this->result as $k => $res ) : ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/test/test-api.phtml ================================================

                Resources available on the api

                  resouces as $resource => $resouceValue ) : ?>

                Publications available on the api

                  publications as $k => $v ) : ?>
                • delete

                Insert

                insert->href ?>

                Update

                update) ?> update2) ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/advanced-theme-settings.phtml ================================================ getService('translator'); $this->headLink( array( 'type' => 'text/css', 'href' => $this->baseUrl('/admin-style/common.css'), 'media' => 'screen', 'rel' => 'stylesheet' ) ); ?>
                action( 'wizard-theme-settings', 'themes', 'admin', array( 'format' => 'adv', 'id' => $this->themeId ) ) ?> action( 'wizard-theme-playlists', 'themes', 'admin', array('id' => $this->themeId ) ) ?>
                action( 'wizard-theme-template-settings', 'themes', 'admin', array( 'format' => 'adv', 'id' => $this->themeId ) ) ?> action( 'wizard-theme-article-types', 'themes', 'admin', array( 'format' => 'adv', 'id' => $this->themeId ) ) ?>
                action('index', 'template', 'admin', $this->templatesParams); ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/index.phtml ================================================ getService('translator'); ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/output-edit.phtml ================================================ outputForm ?> ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/wizard-theme-article-types.adv.phtml ================================================
                formHidden( 'themeId', $this->theme->id, array( 'id' => null ) ) ?>
                Match article types

                Theme article types

                themeArticleTypes as $typeName => $typeFields ) : ?> formHidden( 'themeArticleTypes[]', $typeName, array( 'id' => null ) ) ?>
                  $fieldProps ) : ?>
                • camelize($fieldName) ?> (type ?> length ?>) formHidden( "themeArticleTypeFields[$typeName][]", $fieldName, array( 'id' => null ) ) ?>

                Match with existing

                  themeArticleTypes as $articleTypeName => $typeFields ) : ?>
                • formCheckbox( "articleTypeIgnore[$articleTypeName]" ) ?> formLabel( "articleTypeIgnore[$articleTypeName]", "Do Nothing") ?>
                  formCheckbox( "articleTypeCreate[$articleTypeName]" ) ?> formLabel( "articleTypeCreate[$articleTypeName]", "Create article type") ?>
                    $typeFields ) : ?>
                  • formCheckbox( "articleTypeFieldIgnore[$articleTypeName][$typeFieldName]" ) ?> formLabel( "articleTypeFieldIgnore[$articleTypeName][$typeFieldName]", "Do Nothing") ?>
                    formCheckbox( "articleTypeFieldCreate[$articleTypeName][$typeFieldName]" ) ?> formLabel( "articleTypeFieldCreate[$articleTypeName][$typeFieldName]", "Create field type") ?>
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/wizard-theme-article-types.phtml ================================================ ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/wizard-theme-files.adv.phtml ================================================
                • Current directory:
                • /
                ================================================ FILE: newscoop/application/modules/admin/views/scripts/themes/wizard-theme-playlists.phtml ================================================ getService('translator'); ?>
                trans('Theme playlists', array(), 'themes') ?> themePlaylists) > 0) { ?> playlistsAreUpToDate == false) { ?>
                trans('Cached informations about theme playlists are not up to date!', array(), 'themes') ?>
                themePlaylists as $key => $themePlaylist) { ?>

                trans('Playlist name', array(), 'themes') ?>:

                0){ ?> ,
                getService('newscoop_newscoop.twig.newscoop_extension'); echo $twig->renderTip($translator->trans("Below code should be placed into theme.xml (between 'theme' nodes) file to make it work. This file is located in every theme's main directory.", array(), 'themes'), '