Commits

Bogdan Savluk  committed e248438

Separate repository for base app with admin module.

  • Participants

Comments (0)

Files changed (114)

+syntax: glob
+testapp/assets
+.git
+testapp/protected/modules/admin/extensions/elFinder2/vendors/elFinder
+testapp/protected/modules/admin/extensions/elFinder/vendors/elFinder
+testapp/protected/runtime
+testapp/uploads
+.idea
+testapp/protected/modules/admin/extensions/galleryManager/vendors/jQuery-File-Upload
+testapp/gallery
+testapp/protected/extensions/elFinder2/vendors
+testapp/protected/extensions/elFinder/vendors
+testapp/protected/config/main.php
+testapp/protected/extensions/chosen=https://bitbucket.org/z_bodya/yii-chosen
+testapp/protected/extensions/coordinatepicker=https://bitbucket.org/z_bodya/yii-coordinatepicker
+testapp/protected/extensions/tinymce=https://bitbucket.org/z_bodya/yii-tinymce
+testapp/protected/extensions/elFinder=https://bitbucket.org/z_bodya/yii-elfinder
+testapp/protected/extensions/fileimagearbehavior=https://bitbucket.org/z_bodya/fileimagearbehavior
+testapp/protected/extensions/galleryManager=https://bitbucket.org/z_bodya/gallerymanager
+testapp/protected/extensions/image=https://bitbucket.org/z_bodya/yii-image
+
+8eb837fdd06185660b0da0d0862b7a41d13f48d6 testapp/protected/extensions/chosen
+a770ed90a7bcb9b9b8ea47fa37187851416cd1c2 testapp/protected/extensions/coordinatepicker
+47ac2a2b0030ac2d71438ed5053c07027ee79965 testapp/protected/extensions/elFinder
+e32763f5c0942010e7c04772691364955bca9860 testapp/protected/extensions/fileimagearbehavior
+347553bc6bdc6ca1ab155b52ee34bb139f2f9d01 testapp/protected/extensions/galleryManager
+880649518c00c53bb186a814b111d156d02e241d testapp/protected/extensions/image
+ed9948ed024249a694cd3a71d55bc508d31ee667 testapp/protected/extensions/tinymce

File testapp/.htaccess

+AddDefaultCharset utf-8
+Options +FollowSymLinks
+IndexIgnore */*
+RewriteEngine on
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule . index.php

File testapp/assets/.empty

Empty file added.

File testapp/css/bg.gif

Added
New image

File testapp/css/form.css

+/**
+ * CSS styles for forms generated by yiic.
+ *
+ * The styles can be applied to the following form structure:
+ *
+ * <div class="form">
+ *     <div class="row">
+ *         <label for="inputid">xyz</label>
+ *         <input name="inputid" id="inputid" type="text" />
+ *         <p class="hint">hint text</p>
+ *     </div>
+ *     <div class="row">
+ *         <label for="inputid">xyz</label>
+ *         <input name="inputid" id="inputid" type="text" />
+ *         <p class="hint">hint text</p>
+ *     </div>
+ *     <div class="row buttons">
+ *         <label for="inputid">xyz</label>
+ *         <input name="inputid" id="inputid" type="text" />
+ *         <p class="hint">hint text</p>
+ *     </div>
+ * </div>
+ *
+ * The above code will render the labels and input fields in separate lines.
+ * In order to render them in the same line, please use the "wide" form as follows,
+ *
+ * <div class="wide form">
+ *     ......
+ * </div>
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright &copy; 2008-2010 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+div.form {
+}
+
+div.form input,
+div.form textarea,
+div.form select {
+    margin: 0.2em 0 0.5em 0;
+}
+
+div.form fieldset {
+    border: 1px solid #DDD;
+    padding: 10px;
+    margin: 0 0 10px 0;
+    -moz-border-radius: 7px;
+}
+
+div.form label {
+    font-weight: bold;
+    font-size: 0.9em;
+    display: block;
+}
+
+div.form .row {
+    margin: 5px 0;
+}
+
+div.form .hint {
+    margin: 0;
+    padding: 0;
+    color: #999;
+}
+
+div.form .note {
+    font-style: italic;
+}
+
+div.form span.required {
+    color: red;
+}
+
+div.form div.error label:first-child,
+div.form label.error,
+div.form span.error {
+    color: #C00;
+}
+
+div.form div.error input,
+div.form div.error textarea,
+div.form div.error select,
+div.form input.error,
+div.form textarea.error,
+div.form select.error {
+    background: #FEE;
+    border-color: #C00;
+}
+
+div.form div.success input,
+div.form div.success textarea,
+div.form div.success select,
+div.form input.success,
+div.form textarea.success,
+div.form select.success {
+    background: #E6EFC2;
+    border-color: #C6D880;
+}
+
+div.form .errorSummary {
+    border: 2px solid #C00;
+    padding: 7px 7px 12px 7px;
+    margin: 0 0 20px 0;
+    background: #FEE;
+    font-size: 0.9em;
+}
+
+div.form .errorMessage {
+    color: red;
+    font-size: 0.9em;
+}
+
+div.form .errorSummary p {
+    margin: 0;
+    padding: 5px;
+}
+
+div.form .errorSummary ul {
+    margin: 0;
+    padding: 0 0 0 20px;
+}
+
+div.wide.form label {
+    float: left;
+    margin-right: 10px;
+    position: relative;
+    text-align: right;
+    width: 100px;
+}
+
+div.wide.form .row {
+    clear: left;
+}
+
+div.wide.form .buttons, div.wide.form .hint, div.wide.form .errorMessage {
+    clear: left;
+    padding-left: 110px;
+}

File testapp/css/ie.css

+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* ie.css */
+body {
+    text-align: center;
+}
+
+.container {
+    text-align: left;
+}
+
+* html .column, * html .span-1, * html .span-2, * html .span-3, * html .span-4, * html .span-5, * html .span-6, * html .span-7, * html .span-8, * html .span-9, * html .span-10, * html .span-11, * html .span-12, * html .span-13, * html .span-14, * html .span-15, * html .span-16, * html .span-17, * html .span-18, * html .span-19, * html .span-20, * html .span-21, * html .span-22, * html .span-23, * html .span-24 {
+    display: inline;
+    overflow-x: hidden;
+}
+
+* html legend {
+    margin: 0px -8px 16px 0;
+    padding: 0;
+}
+
+sup {
+    vertical-align: text-top;
+}
+
+sub {
+    vertical-align: text-bottom;
+}
+
+html>body p code {
+    *white-space: normal;
+}
+
+hr {
+    margin: -8px auto 11px;
+}
+
+img {
+    -ms-interpolation-mode: bicubic;
+}
+
+.clearfix, .container {
+    display: inline-block;
+}
+
+* html .clearfix, * html .container {
+    height: 1%;
+}
+
+fieldset {
+    padding-top: 0;
+}
+
+legend {
+    margin-top: -0.2em;
+    margin-bottom: 1em;
+    margin-left: -0.5em;
+}
+
+textarea {
+    overflow: auto;
+}
+
+label {
+    vertical-align: middle;
+    position: relative;
+    top: -0.25em;
+}
+
+input.text, input.title, textarea {
+    background-color: #fff;
+    border: 1px solid #bbb;
+}
+
+input.text:focus, input.title:focus {
+    border-color: #666;
+}
+
+input.text, input.title, textarea, select {
+    margin: 0.5em 0;
+}
+
+input.checkbox, input.radio {
+    position: relative;
+    top: .25em;
+}
+
+form.inline div, form.inline p {
+    vertical-align: middle;
+}
+
+form.inline input.checkbox, form.inline input.radio, form.inline input.button, form.inline button {
+    margin: 0.5em 0;
+}
+
+button, input.button {
+    position: relative;
+    top: 0.25em;
+}

File testapp/css/main.css

+body {
+    margin: 0;
+    padding: 0;
+    color: #555;
+    font: normal 10pt Arial, Helvetica, sans-serif;
+    background: #EFEFEF;
+}
+
+#page {
+    margin-top: 5px;
+    margin-bottom: 5px;
+    background: white;
+    border: 1px solid #C9E0ED;
+}
+
+#header {
+    margin: 0;
+    padding: 0;
+    border-top: 3px solid #C9E0ED;
+}
+
+#content {
+    padding: 20px;
+}
+
+#sidebar {
+    padding: 20px 20px 20px 0;
+}
+
+#footer {
+    padding: 10px;
+    margin: 10px 20px;
+    font-size: 0.8em;
+    text-align: center;
+    border-top: 1px solid #C9E0ED;
+}
+
+#logo {
+    padding: 10px 20px;
+    font-size: 200%;
+}
+
+#mainmenu {
+    background: white url(bg.gif) repeat-x left top;
+}
+
+#mainmenu ul {
+    padding: 6px 20px 5px 20px;
+    margin: 0px;
+}
+
+#mainmenu ul li {
+    display: inline;
+}
+
+#mainmenu ul li a {
+    color: #ffffff;
+    background-color: transparent;
+    font-size: 12px;
+    font-weight: bold;
+    text-decoration: none;
+    padding: 5px 8px;
+}
+
+#mainmenu ul li a:hover, #mainmenu ul li.active a {
+    color: #6399cd;
+    background-color: #EFF4FA;
+    text-decoration: none;
+}
+
+div.flash-error, div.flash-notice, div.flash-success {
+    padding: .8em;
+    margin-bottom: 1em;
+    border: 2px solid #ddd;
+}
+
+div.flash-error {
+    background: #FBE3E4;
+    color: #8a1f11;
+    border-color: #FBC2C4;
+}
+
+div.flash-notice {
+    background: #FFF6BF;
+    color: #514721;
+    border-color: #FFD324;
+}
+
+div.flash-success {
+    background: #E6EFC2;
+    color: #264409;
+    border-color: #C6D880;
+}
+
+div.flash-error a {
+    color: #8a1f11;
+}
+
+div.flash-notice a {
+    color: #514721;
+}
+
+div.flash-success a {
+    color: #264409;
+}
+
+div.form .rememberMe label {
+    display: inline;
+}
+
+div.view {
+    padding: 10px;
+    margin: 10px 0;
+    border: 1px solid #C9E0ED;
+}
+
+div.breadcrumbs {
+    font-size: 0.9em;
+    padding: 5px 20px;
+}
+
+div.breadcrumbs span {
+    font-weight: bold;
+}
+
+div.search-form {
+    padding: 10px;
+    margin: 10px 0;
+    background: #eee;
+}
+
+.portlet {
+
+}
+
+.portlet-decoration {
+    padding: 3px 8px;
+    background: #B7D6E7;
+    border-left: 5px solid #6FACCF;
+}
+
+.portlet-title {
+    font-size: 12px;
+    font-weight: bold;
+    padding: 0;
+    margin: 0;
+    color: #298dcd;
+}
+
+.portlet-content {
+    font-size: 0.9em;
+    margin: 0 0 15px 0;
+    padding: 5px 8px;
+    background: #EFFDFF;
+}
+
+.portlet-content ul {
+    list-style-image: none;
+    list-style-position: outside;
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+.portlet-content li {
+    padding: 2px 0 4px 0px;
+}
+
+.operations {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+.operations li {
+    padding-bottom: 2px;
+}
+
+.operations li a {
+    font: bold 12px Arial;
+    color: #0066A4;
+    display: block;
+    padding: 2px 0 2px 8px;
+    line-height: 15px;
+    text-decoration: none;
+}
+
+.operations li a:visited {
+    color: #0066A4;
+}
+
+.operations li a:hover {
+    background: #80CFFF;
+}

File testapp/css/print.css

+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* print.css */
+body {
+    line-height: 1.5;
+    font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
+    color: #000;
+    background: none;
+    font-size: 10pt;
+}
+
+.container {
+    background: none;
+}
+
+hr {
+    background: #ccc;
+    color: #ccc;
+    width: 100%;
+    height: 2px;
+    margin: 2em 0;
+    padding: 0;
+    border: none;
+}
+
+hr.space {
+    background: #fff;
+    color: #fff;
+    visibility: hidden;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    font-family: "Helvetica Neue", Arial, "Lucida Grande", sans-serif;
+}
+
+code {
+    font: .9em "Courier New", Monaco, Courier, monospace;
+}
+
+a img {
+    border: none;
+}
+
+p img.top {
+    margin-top: 0;
+}
+
+blockquote {
+    margin: 1.5em;
+    padding: 1em;
+    font-style: italic;
+    font-size: .9em;
+}
+
+.small {
+    font-size: .9em;
+}
+
+.large {
+    font-size: 1.1em;
+}
+
+.quiet {
+    color: #999;
+}
+
+.hide {
+    display: none;
+}
+
+a:link, a:visited {
+    background: transparent;
+    font-weight: 700;
+    text-decoration: underline;
+}
+
+a:link:after, a:visited:after {
+    content: " (" attr(href) ")";
+    font-size: 90%;
+}

File testapp/css/screen.css

+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 1.0.1
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* reset.css */
+html {
+    margin: 0;
+    padding: 0;
+    border: 0;
+}
+
+body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    font-size: 100%;
+    font: inherit;
+    vertical-align: baseline;
+}
+
+article, aside, details, figcaption, figure, dialog, footer, header, hgroup, menu, nav, section {
+    display: block;
+}
+
+body {
+    line-height: 1.5;
+    background: white;
+}
+
+table {
+    border-collapse: separate;
+    border-spacing: 0;
+}
+
+caption, th, td {
+    text-align: left;
+    font-weight: normal;
+    float: none !important;
+}
+
+table, th, td {
+    vertical-align: middle;
+}
+
+blockquote:before, blockquote:after, q:before, q:after {
+    content: '';
+}
+
+blockquote, q {
+    quotes: "" "";
+}
+
+a img {
+    border: none;
+}
+
+:focus {
+    outline: 0;
+}
+
+/* typography.css */
+html {
+    font-size: 100.01%;
+}
+
+body {
+    font-size: 75%;
+    color: #222;
+    background: #fff;
+    font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    font-weight: normal;
+    color: #111;
+}
+
+h1 {
+    font-size: 2em;
+    line-height: 1;
+    margin-bottom: 0.5em;
+}
+
+h2 {
+    font-size: 1.6em;
+    margin-bottom: 0.75em;
+}
+
+h3 {
+    font-size: 1.4em;
+    line-height: 1;
+    margin-bottom: 1em;
+}
+
+h4 {
+    font-size: 1.2em;
+    line-height: 1.25;
+    margin-bottom: 1.25em;
+}
+
+h5 {
+    font-size: 1em;
+    font-weight: bold;
+    margin-bottom: 1.5em;
+}
+
+h6 {
+    font-size: 1em;
+    font-weight: bold;
+}
+
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {
+    margin: 0;
+}
+
+p {
+    margin: 0 0 1.5em;
+}
+
+.left {
+    float: left !important;
+}
+
+p .left {
+    margin: 1.5em 1.5em 1.5em 0;
+    padding: 0;
+}
+
+.right {
+    float: right !important;
+}
+
+p .right {
+    margin: 1.5em 0 1.5em 1.5em;
+    padding: 0;
+}
+
+a:focus, a:hover {
+    color: #09f;
+}
+
+a {
+    color: #06c;
+    text-decoration: underline;
+}
+
+blockquote {
+    margin: 1.5em;
+    color: #666;
+    font-style: italic;
+}
+
+strong, dfn {
+    font-weight: bold;
+}
+
+em, dfn {
+    font-style: italic;
+}
+
+sup, sub {
+    line-height: 0;
+}
+
+abbr, acronym {
+    border-bottom: 1px dotted #666;
+}
+
+address {
+    margin: 0 0 1.5em;
+    font-style: italic;
+}
+
+del {
+    color: #666;
+}
+
+pre {
+    margin: 1.5em 0;
+    white-space: pre;
+}
+
+pre, code, tt {
+    font: 1em 'andale mono', 'lucida console', monospace;
+    line-height: 1.5;
+}
+
+li ul, li ol {
+    margin: 0;
+}
+
+ul, ol {
+    margin: 0 1.5em 1.5em 0;
+    padding-left: 1.5em;
+}
+
+ul {
+    list-style-type: disc;
+}
+
+ol {
+    list-style-type: decimal;
+}
+
+dl {
+    margin: 0 0 1.5em 0;
+}
+
+dl dt {
+    font-weight: bold;
+}
+
+dd {
+    margin-left: 1.5em;
+}
+
+table {
+    margin-bottom: 1.4em;
+    width: 100%;
+}
+
+th {
+    font-weight: bold;
+}
+
+thead th {
+    background: #c3d9ff;
+}
+
+th, td, caption {
+    padding: 4px 10px 4px 5px;
+}
+
+tfoot {
+    font-style: italic;
+}
+
+caption {
+    background: #eee;
+}
+
+.small {
+    font-size: .8em;
+    margin-bottom: 1.875em;
+    line-height: 1.875em;
+}
+
+.large {
+    font-size: 1.2em;
+    line-height: 2.5em;
+    margin-bottom: 1.25em;
+}
+
+.hide {
+    display: none;
+}
+
+.quiet {
+    color: #666;
+}
+
+.loud {
+    color: #000;
+}
+
+.highlight {
+    background: #ff0;
+}
+
+.added {
+    background: #060;
+    color: #fff;
+}
+
+.removed {
+    background: #900;
+    color: #fff;
+}
+
+.first {
+    margin-left: 0;
+    padding-left: 0;
+}
+
+.last {
+    margin-right: 0;
+    padding-right: 0;
+}
+
+.top {
+    margin-top: 0;
+    padding-top: 0;
+}
+
+.bottom {
+    margin-bottom: 0;
+    padding-bottom: 0;
+}
+
+/* grid.css */
+.container {
+    width: 950px;
+    margin: 0 auto;
+}
+
+.column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 {
+    float: left;
+    margin-right: 10px;
+}
+
+.last {
+    margin-right: 0;
+}
+
+.span-1 {
+    width: 30px;
+}
+
+.span-2 {
+    width: 70px;
+}
+
+.span-3 {
+    width: 110px;
+}
+
+.span-4 {
+    width: 150px;
+}
+
+.span-5 {
+    width: 190px;
+}
+
+.span-6 {
+    width: 230px;
+}
+
+.span-7 {
+    width: 270px;
+}
+
+.span-8 {
+    width: 310px;
+}
+
+.span-9 {
+    width: 350px;
+}
+
+.span-10 {
+    width: 390px;
+}
+
+.span-11 {
+    width: 430px;
+}
+
+.span-12 {
+    width: 470px;
+}
+
+.span-13 {
+    width: 510px;
+}
+
+.span-14 {
+    width: 550px;
+}
+
+.span-15 {
+    width: 590px;
+}
+
+.span-16 {
+    width: 630px;
+}
+
+.span-17 {
+    width: 670px;
+}
+
+.span-18 {
+    width: 710px;
+}
+
+.span-19 {
+    width: 750px;
+}
+
+.span-20 {
+    width: 790px;
+}
+
+.span-21 {
+    width: 830px;
+}
+
+.span-22 {
+    width: 870px;
+}
+
+.span-23 {
+    width: 910px;
+}
+
+.span-24 {
+    width: 950px;
+    margin-right: 0;
+}
+
+input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {
+    border-left-width: 1px;
+    border-right-width: 1px;
+    padding-left: 5px;
+    padding-right: 5px;
+}
+
+input.span-1, textarea.span-1 {
+    width: 18px;
+}
+
+input.span-2, textarea.span-2 {
+    width: 58px;
+}
+
+input.span-3, textarea.span-3 {
+    width: 98px;
+}
+
+input.span-4, textarea.span-4 {
+    width: 138px;
+}
+
+input.span-5, textarea.span-5 {
+    width: 178px;
+}
+
+input.span-6, textarea.span-6 {
+    width: 218px;
+}
+
+input.span-7, textarea.span-7 {
+    width: 258px;
+}
+
+input.span-8, textarea.span-8 {
+    width: 298px;
+}
+
+input.span-9, textarea.span-9 {
+    width: 338px;
+}
+
+input.span-10, textarea.span-10 {
+    width: 378px;
+}
+
+input.span-11, textarea.span-11 {
+    width: 418px;
+}
+
+input.span-12, textarea.span-12 {
+    width: 458px;
+}
+
+input.span-13, textarea.span-13 {
+    width: 498px;
+}
+
+input.span-14, textarea.span-14 {
+    width: 538px;
+}
+
+input.span-15, textarea.span-15 {
+    width: 578px;
+}
+
+input.span-16, textarea.span-16 {
+    width: 618px;
+}
+
+input.span-17, textarea.span-17 {
+    width: 658px;
+}
+
+input.span-18, textarea.span-18 {
+    width: 698px;
+}
+
+input.span-19, textarea.span-19 {
+    width: 738px;
+}
+
+input.span-20, textarea.span-20 {
+    width: 778px;
+}
+
+input.span-21, textarea.span-21 {
+    width: 818px;
+}
+
+input.span-22, textarea.span-22 {
+    width: 858px;
+}
+
+input.span-23, textarea.span-23 {
+    width: 898px;
+}
+
+input.span-24, textarea.span-24 {
+    width: 938px;
+}
+
+.append-1 {
+    padding-right: 40px;
+}
+
+.append-2 {
+    padding-right: 80px;
+}
+
+.append-3 {
+    padding-right: 120px;
+}
+
+.append-4 {
+    padding-right: 160px;
+}
+
+.append-5 {
+    padding-right: 200px;
+}
+
+.append-6 {
+    padding-right: 240px;
+}
+
+.append-7 {
+    padding-right: 280px;
+}
+
+.append-8 {
+    padding-right: 320px;
+}
+
+.append-9 {
+    padding-right: 360px;
+}
+
+.append-10 {
+    padding-right: 400px;
+}
+
+.append-11 {
+    padding-right: 440px;
+}
+
+.append-12 {
+    padding-right: 480px;
+}
+
+.append-13 {
+    padding-right: 520px;
+}
+
+.append-14 {
+    padding-right: 560px;
+}
+
+.append-15 {
+    padding-right: 600px;
+}
+
+.append-16 {
+    padding-right: 640px;
+}
+
+.append-17 {
+    padding-right: 680px;
+}
+
+.append-18 {
+    padding-right: 720px;
+}
+
+.append-19 {
+    padding-right: 760px;
+}
+
+.append-20 {
+    padding-right: 800px;
+}
+
+.append-21 {
+    padding-right: 840px;
+}
+
+.append-22 {
+    padding-right: 880px;
+}
+
+.append-23 {
+    padding-right: 920px;
+}
+
+.prepend-1 {
+    padding-left: 40px;
+}
+
+.prepend-2 {
+    padding-left: 80px;
+}
+
+.prepend-3 {
+    padding-left: 120px;
+}
+
+.prepend-4 {
+    padding-left: 160px;
+}
+
+.prepend-5 {
+    padding-left: 200px;
+}
+
+.prepend-6 {
+    padding-left: 240px;
+}
+
+.prepend-7 {
+    padding-left: 280px;
+}
+
+.prepend-8 {
+    padding-left: 320px;
+}
+
+.prepend-9 {
+    padding-left: 360px;
+}
+
+.prepend-10 {
+    padding-left: 400px;
+}
+
+.prepend-11 {
+    padding-left: 440px;
+}
+
+.prepend-12 {
+    padding-left: 480px;
+}
+
+.prepend-13 {
+    padding-left: 520px;
+}
+
+.prepend-14 {
+    padding-left: 560px;
+}
+
+.prepend-15 {
+    padding-left: 600px;
+}
+
+.prepend-16 {
+    padding-left: 640px;
+}
+
+.prepend-17 {
+    padding-left: 680px;
+}
+
+.prepend-18 {
+    padding-left: 720px;
+}
+
+.prepend-19 {
+    padding-left: 760px;
+}
+
+.prepend-20 {
+    padding-left: 800px;
+}
+
+.prepend-21 {
+    padding-left: 840px;
+}
+
+.prepend-22 {
+    padding-left: 880px;
+}
+
+.prepend-23 {
+    padding-left: 920px;
+}
+
+.border {
+    padding-right: 4px;
+    margin-right: 5px;
+    border-right: 1px solid #ddd;
+}
+
+.colborder {
+    padding-right: 24px;
+    margin-right: 25px;
+    border-right: 1px solid #ddd;
+}
+
+.pull-1 {
+    margin-left: -40px;
+}
+
+.pull-2 {
+    margin-left: -80px;
+}
+
+.pull-3 {
+    margin-left: -120px;
+}
+
+.pull-4 {
+    margin-left: -160px;
+}
+
+.pull-5 {
+    margin-left: -200px;
+}
+
+.pull-6 {
+    margin-left: -240px;
+}
+
+.pull-7 {
+    margin-left: -280px;
+}
+
+.pull-8 {
+    margin-left: -320px;
+}
+
+.pull-9 {
+    margin-left: -360px;
+}
+
+.pull-10 {
+    margin-left: -400px;
+}
+
+.pull-11 {
+    margin-left: -440px;
+}
+
+.pull-12 {
+    margin-left: -480px;
+}
+
+.pull-13 {
+    margin-left: -520px;
+}
+
+.pull-14 {
+    margin-left: -560px;
+}
+
+.pull-15 {
+    margin-left: -600px;
+}
+
+.pull-16 {
+    margin-left: -640px;
+}
+
+.pull-17 {
+    margin-left: -680px;
+}
+
+.pull-18 {
+    margin-left: -720px;
+}
+
+.pull-19 {
+    margin-left: -760px;
+}
+
+.pull-20 {
+    margin-left: -800px;
+}
+
+.pull-21 {
+    margin-left: -840px;
+}
+
+.pull-22 {
+    margin-left: -880px;
+}
+
+.pull-23 {
+    margin-left: -920px;
+}
+
+.pull-24 {
+    margin-left: -960px;
+}
+
+.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {
+    float: left;
+    position: relative;
+}
+
+.push-1 {
+    margin: 0 -40px 1.5em 40px;
+}
+
+.push-2 {
+    margin: 0 -80px 1.5em 80px;
+}
+
+.push-3 {
+    margin: 0 -120px 1.5em 120px;
+}
+
+.push-4 {
+    margin: 0 -160px 1.5em 160px;
+}
+
+.push-5 {
+    margin: 0 -200px 1.5em 200px;
+}
+
+.push-6 {
+    margin: 0 -240px 1.5em 240px;
+}
+
+.push-7 {
+    margin: 0 -280px 1.5em 280px;
+}
+
+.push-8 {
+    margin: 0 -320px 1.5em 320px;
+}
+
+.push-9 {
+    margin: 0 -360px 1.5em 360px;
+}
+
+.push-10 {
+    margin: 0 -400px 1.5em 400px;
+}
+
+.push-11 {
+    margin: 0 -440px 1.5em 440px;
+}
+
+.push-12 {
+    margin: 0 -480px 1.5em 480px;
+}
+
+.push-13 {
+    margin: 0 -520px 1.5em 520px;
+}
+
+.push-14 {
+    margin: 0 -560px 1.5em 560px;
+}
+
+.push-15 {
+    margin: 0 -600px 1.5em 600px;
+}
+
+.push-16 {
+    margin: 0 -640px 1.5em 640px;
+}
+
+.push-17 {
+    margin: 0 -680px 1.5em 680px;
+}
+
+.push-18 {
+    margin: 0 -720px 1.5em 720px;
+}
+
+.push-19 {
+    margin: 0 -760px 1.5em 760px;
+}
+
+.push-20 {
+    margin: 0 -800px 1.5em 800px;
+}
+
+.push-21 {
+    margin: 0 -840px 1.5em 840px;
+}
+
+.push-22 {
+    margin: 0 -880px 1.5em 880px;
+}
+
+.push-23 {
+    margin: 0 -920px 1.5em 920px;
+}
+
+.push-24 {
+    margin: 0 -960px 1.5em 960px;
+}
+
+.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {
+    float: left;
+    position: relative;
+}
+
+div.prepend-top, .prepend-top {
+    margin-top: 1.5em;
+}
+
+div.append-bottom, .append-bottom {
+    margin-bottom: 1.5em;
+}
+
+.box {
+    padding: 1.5em;
+    margin-bottom: 1.5em;
+    background: #e5eCf9;
+}
+
+hr {
+    background: #ddd;
+    color: #ddd;
+    clear: both;
+    float: none;
+    width: 100%;
+    height: 1px;
+    margin: 0 0 17px;
+    border: none;
+}
+
+hr.space {
+    background: #fff;
+    color: #fff;
+    visibility: hidden;
+}
+
+.clearfix:after, .container:after {
+    content: "\0020";
+    display: block;
+    height: 0;
+    clear: both;
+    visibility: hidden;
+    overflow: hidden;
+}
+
+.clearfix, .container {
+    display: block;
+}
+
+.clear {
+    clear: both;
+}

File testapp/css/wysiwyg.css

Empty file added.

File testapp/gallery/.empty

Empty file added.

File testapp/index.php

+<?php
+
+// change the following paths if necessary
+$yii=dirname(__FILE__).'/../../yii-1.1.10/framework/yii.php';
+$config=dirname(__FILE__).'/protected/config/main.php';
+
+// remove the following lines when in production mode
+defined('YII_DEBUG') or define('YII_DEBUG',true);
+// specify how many levels of call stack should be shown in each log message
+defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
+
+require_once($yii);
+Yii::createWebApplication($config)->run();

File testapp/protected/.htaccess

+deny from all

File testapp/protected/components/Controller.php

+<?php
+/**
+ * Controller is the customized base controller class.
+ * All controller classes for this application should extend from this base class.
+ */
+class Controller extends CController
+{
+	/**
+	 * @var string the default layout for the controller view. Defaults to '//layouts/column1',
+	 * meaning using a single column layout. See 'protected/views/layouts/column1.php'.
+	 */
+	public $layout='//layouts/column1';
+	/**
+	 * @var array context menu items. This property will be assigned to {@link CMenu::items}.
+	 */
+	public $menu=array();
+	/**
+	 * @var array the breadcrumbs of the current page. The value of this property will
+	 * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
+	 * for more details on how to specify this property.
+	 */
+	public $breadcrumbs=array();
+}

File testapp/protected/components/HtmlUtils.php

+<?php
+class HtmlUtils
+{
+    /**
+     * Truncates text.
+     *
+     * Code grabbed from:
+     * http://www.gsdesign.ro/blog/cut-html-string-without-breaking-the-tags/
+     *
+     * Cuts a string to the length of $length and replaces the last characters
+     * with the ending if the text is longer than length.
+     *
+     * @param string  $text String to truncate.
+     * @param integer $length Length of returned string, including ellipsis.
+     * @param string  $ending Ending to be appended to the trimmed string.
+     * @param boolean $exact If false, $text will not be cut mid-word
+     * @param boolean $considerHtml If true, HTML tags would be handled correctly
+     * @return string Trimmed string.
+     */
+    static function truncate($text, $length = 100, $ending = '...', $exact = true, $considerHtml = false)
+    {
+        if ($considerHtml) {
+            // if the plain text is shorter than the maximum length, return the whole text
+            if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
+                return $text;
+            }
+
+            // splits all html-tags to scanable lines
+            preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER);
+
+            $total_length = strlen($ending);
+            $open_tags = array();
+            $truncate = '';
+
+            foreach ($lines as $line_matchings) {
+                // if there is any html-tag in this line, handle it and add it (uncounted) to the output
+                if (!empty($line_matchings[1])) {
+                    // if it's an "empty element" with or without xhtml-conform closing slash (f.e. <br/>)
+                    if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) {
+                        // do nothing
+                        // if tag is a closing tag (f.e. </b>)
+                    } else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) {
+                        // delete tag from $open_tags list
+                        $pos = array_search($tag_matchings[1], $open_tags);
+                        if ($pos !== false) {
+                            unset($open_tags[$pos]);
+                        }
+                        // if tag is an opening tag (f.e. <b>)
+                    } else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) {
+                        // add tag to the beginning of $open_tags list
+                        array_unshift($open_tags, strtolower($tag_matchings[1]));
+                    }
+                    // add html-tag to $truncate'd text
+                    $truncate .= $line_matchings[1];
+                }
+
+                // calculate the length of the plain text part of the line; handle entities as one character
+                $content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $line_matchings[2]));
+                if ($total_length + $content_length > $length) {
+                    // the number of characters which are left
+                    $left = $length - $total_length;
+                    $entities_length = 0;
+                    // search for html entities
+                    if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) {
+                        // calculate the real length of all entities in the legal range
+                        foreach ($entities[0] as $entity) {
+                            if ($entity[1] + 1 - $entities_length <= $left) {
+                                $left--;
+                                $entities_length += strlen($entity[0]);
+                            } else {
+                                // no more characters left
+                                break;
+                            }
+                        }
+                    }
+                    $truncate .= substr($line_matchings[2], 0, $left + $entities_length);
+                    // maximum lenght is reached, so get off the loop
+                    break;
+                } else {
+                    $truncate .= $line_matchings[2];
+                    $total_length += $content_length;
+                }
+
+                // if the maximum length is reached, get off the loop
+                if ($total_length >= $length) {
+                    break;
+                }
+            }
+        } else {
+            if (strlen($text) <= $length) {
+                return $text;
+            } else {
+                $truncate = substr($text, 0, $length - strlen($ending));
+            }
+        }
+
+        // if the words shouldn't be cut in the middle...
+        if (!$exact) {
+            // ...search the last occurance of a space...
+            $spacepos = strrpos($truncate, ' ');
+            if (isset($spacepos)) {
+                // ...and cut the text in this position
+                $truncate = substr($truncate, 0, $spacepos);
+            }
+        }
+
+        // add the defined ending to the text
+        $truncate .= $ending;
+
+        if ($considerHtml) {
+            // close all unclosed html-tags
+            foreach ($open_tags as $tag) {
+                $truncate .= '</' . $tag . '>';
+            }
+        }
+
+        return $truncate;
+
+    }
+
+    /**
+     * strtr replacement for utf8 strings
+     * @static
+     * @param $str
+     * @param $from
+     * @param $to
+     * @return string
+     */
+    static function strtr_utf8($str, $from, $to)
+    {
+        $keys = array();
+        $values = array();
+        preg_match_all('/./u', $from, $keys);
+        preg_match_all('/./u', $to, $values);
+        $mapping = array_combine($keys[0], $values[0]);
+        return strtr($str, $mapping);
+    }
+}

File testapp/protected/components/SitemapWriter.php

+<?php
+/**
+ * @author Bogdan Savluk <savluk.bogdan@gmail.com>
+ * For more info about params see:
+ * @link http://www.sitemaps.org/protocol.html
+ */
+class SitemapWriter
+{
+    const FREQ_ALWAYS = 0;
+    const FREQ_HOURLY = 1;
+    const FREQ_DAILY = 2;
+    const FREQ_WEEKLY = 3;
+    const FREQ_MONTHLY = 4;
+    const FREQ_YEARLY = 5;
+    const FREQ_NEVER = 6;
+    private static $freq = array(
+        'always',
+        'hourly',
+        'daily',
+        'weekly',
+        'monthly',
+        'yearly',
+        'newer');
+    private $_pull = array();
+
+    public function addPage($location, $lastmod = null, $changefreq = null, $priority = null)
+    {
+        $this->_pull[] = array(
+            $location, $lastmod, $changefreq, $priority
+        );
+    }
+
+    public function generateXml($processOutput = false)
+    {
+        if ($processOutput) {
+            ob_start();
+        }
+        echo '<?xml version="1.0" encoding="UTF-8"?>',
+
+        '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
+
+        foreach ($this->_pull as &$item) {
+            echo '<url>', '<loc>', htmlentities($item[0]), '</loc>';
+            if (isset($item[1])) {
+                echo '<lastmod>', $item[1], '</lastmod>';
+            }
+            if (isset($item[1])) {
+                echo '<changefreq>', self::$freq[$item[2]], '</changefreq>';
+
+            }
+            if (isset($item[1])) {
+                echo '<priority>', $item[3], '</priority>';
+            }
+            echo '</url>';
+        }
+        echo '</urlset>';
+        $res = null;
+        if ($processOutput) {
+            $res = ob_get_clean();
+        }
+        return $res;
+    }
+}

File testapp/protected/components/Transliterator.php

+<?php
+
+class Transliterator
+{
+    /**
+     * Transliterate string
+     * @static
+     * @param $string
+     * @return string
+     */
+    public static function encode($string)
+    {
+        $converter = array(
+            'а' => 'a', 'б' => 'b', 'в' => 'v',
+            'г' => 'g', 'д' => 'd', 'е' => 'e',
+            'ё' => 'e', 'ж' => 'zh', 'з' => 'z',
+            'и' => 'i', 'й' => 'y', 'к' => 'k',
+            'л' => 'l', 'м' => 'm', 'н' => 'n',
+            'о' => 'o', 'п' => 'p', 'р' => 'r',
+            'с' => 's', 'т' => 't', 'у' => 'u',
+            'ф' => 'f', 'х' => 'h', 'ц' => 'c',
+            'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch',
+            'ь' => "'", 'ы' => 'y', 'ъ' => "'",
+            'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
+
+            'А' => 'A', 'Б' => 'B', 'В' => 'V',
+            'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
+            'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z',
+            'И' => 'I', 'Й' => 'Y', 'К' => 'K',
+            'Л' => 'L', 'М' => 'M', 'Н' => 'N',
+            'О' => 'O', 'П' => 'P', 'Р' => 'R',
+            'С' => 'S', 'Т' => 'T', 'У' => 'U',
+            'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
+            'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch',
+            'Ь' => "'", 'Ы' => 'Y', 'Ъ' => "'",
+            'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
+        );
+        return strtr($string, $converter);
+    }
+}

File testapp/protected/components/UserIdentity.php

+<?php
+
+/**
+ * UserIdentity represents the data needed to identity a user.
+ * It contains the authentication method that checks if the provided
+ * data can identity the user.
+ */
+class UserIdentity extends CUserIdentity
+{
+	/**
+	 * Authenticates a user.
+	 * The example implementation makes sure if the username and password
+	 * are both 'demo'.
+	 * In practical applications, this should be changed to authenticate
+	 * against some persistent user identity storage (e.g. database).
+	 * @return boolean whether authentication succeeds.
+	 */
+	public function authenticate()
+	{
+		$users=array(
+			// username => password
+			'demo'=>'demo',
+			'admin'=>'admin',
+		);
+		if(!isset($users[$this->username]))
+			$this->errorCode=self::ERROR_USERNAME_INVALID;
+		else if($users[$this->username]!==$this->password)
+			$this->errorCode=self::ERROR_PASSWORD_INVALID;
+		else
+			$this->errorCode=self::ERROR_NONE;
+		return !$this->errorCode;
+	}
+}

File testapp/protected/config/main.php.dist

+<?php
+
+// uncomment the following to define a path alias
+// Yii::setPathOfAlias('local','path/to/local-folder');
+
+// This is the main Web application configuration. Any writable
+// CWebApplication properties can be configured here.
+return array(
+    'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',
+    'name' => 'CMS Test',
+
+    // preloading 'log' component
+    'preload' => array('log'),
+
+    // autoloading model and component classes
+    'import' => array(
+        'application.models.*',
+        'application.components.*',
+        'ext.fileimagearbehavior.*',
+        'ext.galleryManager.models.*',
+        'ext.chosen.*',
+    ),
+
+    'modules' => array(
+        // uncomment the following to enable the Gii tool
+        'gii' => array(
+            'class' => 'system.gii.GiiModule',
+            'password' => 'password',
+            // If removed, Gii defaults to localhost only. Edit carefully to taste.
+            'ipFilters' => array('127.0.0.1', '::1'),
+            'generatorPaths' => array(
+                'application.modules.admin.gii', // a path alias
+            ),
+        ),
+        'admin',
+    ),
+
+    // application components
+    'components' => array(
+        'widgetFactory' => array(
+            'class' => 'CWidgetFactory',
+            'widgets' => array(
+                'TinyMce' => array(
+                    'compressorRoute' => 'admin/tinyMce/compressor',
+                    'spellcheckerRoute' => 'admin/tinyMce/spellchecker',
+                    'fileManager' => array(
+                        'class' => 'ext.elFinder.TinyMceElFinder',
+                        'connectorRoute'=>'admin/elfinder/connector',
+                    )
+                ),
+                'GalleryManager'=>array(
+                    'controllerRoute' => '/admin/gallery',
+                ) ,
+                'ServerFileInput'=>array(
+                    'connectorRoute' => 'admin/elfinder/connector',
+                ),
+                'ElFinderWidget' => array(
+                    'connectorRoute'=>'admin/elfinder/connector',
+                ),
+            )
+        ),
+        'image' => array(
+            'class' => 'application.extensions.image.CImageComponent',
+            // GD or ImageMagick
+            'driver' => 'GD',
+            // ImageMagick setup path
+            'params' => array('directory' => '/opt/local/bin'),
+        ),
+
+        'user' => array(
+            // enable cookie-based authentication
+            'allowAutoLogin' => true,
+        ),
+        // uncomment the following to enable URLs in path-format
+        'urlManager' => array(
+            'urlFormat' => 'path',
+            'showScriptName' => false,
+            'rules' => array(
+                '<controller:\w+>/<id:\d+>' => '<controller>/view',
+                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
+                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
+            ),
+        ),
+
+        'db' =>