feat(deployed): add mod_mx_timeline 4.0.3 (no-source, vetted live)
MX Timeline module (mixwebtemplates); no identifiable source -> deployed files. Signed-off-by: LÁZÁR Imre <imre@illusion.hu> Assisted-by: claude-code@claude-opus-4-8
This commit is contained in:
parent
b4347e0a26
commit
a5123dc62b
@ -0,0 +1,348 @@
|
|||||||
|
#status {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/* Alert Boxes */
|
||||||
|
.alert {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
max-width: 550px;
|
||||||
|
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
|
||||||
|
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
|
||||||
|
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
|
||||||
|
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
|
||||||
|
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
|
||||||
|
}
|
||||||
|
.alert-blue label {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.alert-blue {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
clear: both;
|
||||||
|
line-height: 18px;
|
||||||
|
background-color: #c00;
|
||||||
|
-webkit-border-radius: 2px;
|
||||||
|
-moz-border-radius: 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 10px 15px;
|
||||||
|
text-shadow: 1px 1px #066da1;
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.alert-grey {
|
||||||
|
color: #555555;
|
||||||
|
font-size: 12px;
|
||||||
|
clear: both;
|
||||||
|
line-height: 18px;
|
||||||
|
background-color: #fefefe;
|
||||||
|
-webkit-border-radius: 2px;
|
||||||
|
-moz-border-radius: 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: 1px solid #d6d6d6;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 5px 10px 2px;
|
||||||
|
text-shadow: 1px 1px #fff;
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
.alert-warning {
|
||||||
|
color: #555;
|
||||||
|
font-size: 14px;
|
||||||
|
clear: both;
|
||||||
|
line-height: 18px;
|
||||||
|
background: url("../images/admin/notice.png") no-repeat scroll 5px center #eeeeee;
|
||||||
|
-webkit-border-radius: 2px;
|
||||||
|
-moz-border-radius: 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: 1px solid #d6d6d6;
|
||||||
|
padding: 12px 15px 12px 50px;
|
||||||
|
text-shadow: 1px 1px #fff;
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
max-width: 510px;
|
||||||
|
}
|
||||||
|
/* Color Picker */
|
||||||
|
.moor-box,
|
||||||
|
.moor-overlayBox,
|
||||||
|
.moor-slider,
|
||||||
|
.moor-chooseColor {
|
||||||
|
border: 1px solid #DDDDDD;
|
||||||
|
}
|
||||||
|
/* Template Info */
|
||||||
|
.templateinfo img {
|
||||||
|
float: left;
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
.templateinfo p {
|
||||||
|
padding: 0 20px;
|
||||||
|
max-width: 600px;
|
||||||
|
text-align: left;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.templateinfo h4 {
|
||||||
|
padding: 10px 20px;
|
||||||
|
font-weight: normal;
|
||||||
|
letter-spacing: 1.5px;
|
||||||
|
font-size: 22px;
|
||||||
|
color: #888888;
|
||||||
|
text-transform: uppercase;
|
||||||
|
background: #eeeeee;
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.form-horizontal .control-label {
|
||||||
|
min-width: 180px;
|
||||||
|
}
|
||||||
|
.form-horizontal .control-label label {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
/* Joomla 3.2 */
|
||||||
|
.row-fluid .span6 {
|
||||||
|
margin-left: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#myTabTabs.nav.nav-tabs {
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
box-shadow: 0 2px 2px 0 rgba(255, 255, 255, 0.5) inset;
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
border: 1px solid #DDDDDD;
|
||||||
|
border-top-color: #E4E4E4;
|
||||||
|
padding: 8px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
#myTabTabs.nav.nav-tabs > li > a {
|
||||||
|
position: relative;
|
||||||
|
background: #fafafa;
|
||||||
|
color: #c00;
|
||||||
|
display: block;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
text-decoration: none;
|
||||||
|
margin: 3px;
|
||||||
|
z-index: 1;
|
||||||
|
text-shadow: none;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
padding-top: 8px;
|
||||||
|
opacity: 1;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 6px;
|
||||||
|
background-clip: padding-box;
|
||||||
|
box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.5), 1px 1px 0px rgba(255, 255, 255, 0.6);
|
||||||
|
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.02) 100%);
|
||||||
|
}
|
||||||
|
#myTabTabs.nav.nav-tabs > li a:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
#myTabTabs.nav.nav-tabs > li.active a,
|
||||||
|
#myTabTabs.nav.nav-tabs > li a:focus {
|
||||||
|
background-color: #c00;
|
||||||
|
color: #fff;
|
||||||
|
border: 1px solid #c00;
|
||||||
|
-moz-box-shadow: inset 0 0 5px rgba(52, 152, 219, 0.1);
|
||||||
|
-webkit-box-shadow: inset 0 0 5px rgba(52, 152, 219, 0.1);
|
||||||
|
box-shadow: inset 0 0 5px rgba(52, 152, 219, 0.1);
|
||||||
|
}
|
||||||
|
#myTabTabs.nav-tabs > .active > a,
|
||||||
|
#myTabTabs .nav-tabs > .active > a:hover,
|
||||||
|
#myTabTabs .nav-tabs > .active > a:focus,
|
||||||
|
#myTabTabs .nav-tabs > li > a:hover {
|
||||||
|
background: #ffffff;
|
||||||
|
color: #3aa6d5;
|
||||||
|
outline: none;
|
||||||
|
-moz-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.18), 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||||
|
-webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.18), 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||||
|
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.18), 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.14);
|
||||||
|
/* stroke */
|
||||||
|
}
|
||||||
|
.tab-content {
|
||||||
|
background: none repeat scroll 0 0 #FAFAFA;
|
||||||
|
border-left: 1px solid #DDDDDD;
|
||||||
|
border-right: 1px solid #DDDDDD;
|
||||||
|
border-bottom: 1px solid #DDDDDD;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 0px 0px 8px 8px;
|
||||||
|
}
|
||||||
|
#system-message-container {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
/* Opacity Slider */
|
||||||
|
.opacityvalue {
|
||||||
|
background-color: #EEEEEE;
|
||||||
|
border: 1px solid #CCCCCC;
|
||||||
|
border-radius: 3px;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: normal;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
min-width: 16px;
|
||||||
|
padding: 1px 5px;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 0 1px 0 #FFFFFF;
|
||||||
|
}
|
||||||
|
input[type="range"] {
|
||||||
|
margin: 0 5px;
|
||||||
|
padding: 0;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
#jform_params_social_custom_modal .btn-success,
|
||||||
|
#jform_params_social_custom_modal .btn-danger {
|
||||||
|
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||||
|
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||||
|
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||||
|
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||||
|
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||||
|
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||||
|
border-width: 0px;
|
||||||
|
padding: 7px 14px 4px;
|
||||||
|
}
|
||||||
|
#jform_params_social_custom_modal .btn-success:hover,
|
||||||
|
#jform_params_social_custom_modal .btn-danger:hover {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
#jform_params_social_custom_modal .btn-success {
|
||||||
|
background-color: #51A351;
|
||||||
|
}
|
||||||
|
#jform_params_social_custom_modal .btn-success:hover {
|
||||||
|
background-color: #408140;
|
||||||
|
}
|
||||||
|
#jform_params_social_custom_modal .btn-danger {
|
||||||
|
background-color: #BD362F;
|
||||||
|
}
|
||||||
|
#jform_params_social_custom_modal .btn-danger:hover {
|
||||||
|
background-color: #942a25;
|
||||||
|
}
|
||||||
|
#installer-install .moduleinfo {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
/* Subforms */
|
||||||
|
.subform-repeatable {
|
||||||
|
padding-right: 0;
|
||||||
|
border-top: 1px solid #eaeaea;
|
||||||
|
}
|
||||||
|
.subform-repeatable > .btn-toolbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.subform-repeatable .subform-repeatable-group {
|
||||||
|
position: relative;
|
||||||
|
max-width: 900px;
|
||||||
|
padding: 0;
|
||||||
|
padding-top: 40px;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
margin: 10px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
.subform-repeatable .subform-repeatable-group > .btn-toolbar {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 2px;
|
||||||
|
margin-top: 6px !important;
|
||||||
|
}
|
||||||
|
.subform-repeatable .subform-repeatable-group .control-group {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.subform-repeatable .btn-success,
|
||||||
|
.subform-repeatable .btn-danger,
|
||||||
|
.subform-repeatable .btn-primary {
|
||||||
|
position: static !important;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 18px !important;
|
||||||
|
margin: 0 0 0 -1px !important;
|
||||||
|
padding: 4px 12px !important;
|
||||||
|
border-width: 1px !important;
|
||||||
|
}
|
||||||
|
.subform-repeatable .btn-success {
|
||||||
|
color: #333 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subform-repeatable .btn-success {
|
||||||
|
border-radius: 3px 0 0 3px !important;
|
||||||
|
}
|
||||||
|
.subform-repeatable .btn-danger {
|
||||||
|
border-radius: 0 !important;
|
||||||
|
}
|
||||||
|
.subform-repeatable .btn-primary {
|
||||||
|
border-radius: 0 3px 3px 0 !important;
|
||||||
|
}
|
||||||
|
.subform-repeatable fieldset {
|
||||||
|
background-color: #f3f3f3;
|
||||||
|
padding: 10px 20px 10px;
|
||||||
|
}
|
||||||
|
.subform-repeatable .btn-group {
|
||||||
|
border: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
.subform-repeatable .slideshow-subform .control-group {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
margin-top: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.subform-repeatable .slideshow-subform .control-label {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.subform-repeatable .slideshow-subform .controls {
|
||||||
|
margin-left: 0px !important;
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
.form-horizontal .control-label {
|
||||||
|
padding-right: 0 !important;
|
||||||
|
}
|
||||||
|
.moduleoverrides-subform input ~ .control-group {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
margin-top: 0 !important;
|
||||||
|
margin-bottom: 5px !important;
|
||||||
|
}
|
||||||
|
.moduleoverrides-subform input ~ .control-group .control-label {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.moduleoverrides-subform input ~ .control-group .controls {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.moduleoverrides-subform input ~ .control-group .input-prepend.input-append input {
|
||||||
|
max-width: 30px;
|
||||||
|
}
|
||||||
|
.moduleoverrides-subform input + .control-group {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.moduleoverrides-subform input + .control-group .control-label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
input[value="margin"] + .control-group {
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
input[value="margin"] + .control-group .control-label {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
input[value="margin"] + .control-group + .control-group .control-label {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
#attrib-H3MODULEWIDTHS hr {
|
||||||
|
margin: 0 0 -10px;
|
||||||
|
}
|
||||||
|
/* Subform Lightbox Fix */
|
||||||
|
#sbox-overlay {
|
||||||
|
position: fixed !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#jpelement_list_items_added{
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
#jpelement_list_items_added li{
|
||||||
|
list-style: none;
|
||||||
|
margin: 2px 0;
|
||||||
|
}
|
||||||
|
#jpelement_list_items_added li span.icon-cancel{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
9141
deployed/mod_mx_timeline/modules/mod_mx_timeline/assets/css/bootstrap.css
vendored
Normal file
9141
deployed/mod_mx_timeline/modules/mod_mx_timeline/assets/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@
|
|||||||
|
<html><body bgcolor="#FFFFFF"></body></html>
|
||||||
@ -0,0 +1,137 @@
|
|||||||
|
.timeline {
|
||||||
|
border-left:3px solid #c00;
|
||||||
|
border-bottom-right-radius:2px;
|
||||||
|
border-top-right-radius:2px;
|
||||||
|
position:relative;
|
||||||
|
padding:0 30px;
|
||||||
|
margin-left:280px
|
||||||
|
}
|
||||||
|
.timeline .item {
|
||||||
|
position:relative;
|
||||||
|
margin-bottom:45px
|
||||||
|
}
|
||||||
|
.timeline .item:last-child {
|
||||||
|
margin-bottom:0
|
||||||
|
}
|
||||||
|
.timeline .item:before {
|
||||||
|
content:"";
|
||||||
|
position:absolute;
|
||||||
|
left:-43px;
|
||||||
|
top:0;
|
||||||
|
display:inline-block;
|
||||||
|
width:17px;
|
||||||
|
height:17px;
|
||||||
|
-webkit-border-radius:50%;
|
||||||
|
-moz-border-radius:50%;
|
||||||
|
-ms-border-radius:50%;
|
||||||
|
-o-border-radius:50%;
|
||||||
|
border-radius:50%;
|
||||||
|
-moz-background-clip:padding;
|
||||||
|
-webkit-background-clip:padding-box;
|
||||||
|
background-clip:padding-box;
|
||||||
|
background:#fff;
|
||||||
|
border:3px solid #c00
|
||||||
|
}
|
||||||
|
.timeline .item:after {
|
||||||
|
content:"";
|
||||||
|
position:absolute;
|
||||||
|
left:-37px;
|
||||||
|
top:6px;
|
||||||
|
display:inline-block;
|
||||||
|
width:10px;
|
||||||
|
height:10px;
|
||||||
|
-webkit-border-radius:50%;
|
||||||
|
-moz-border-radius:50%;
|
||||||
|
-ms-border-radius:50%;
|
||||||
|
-o-border-radius:50%;
|
||||||
|
border-radius:50%;
|
||||||
|
-moz-background-clip:padding;
|
||||||
|
-webkit-background-clip:padding-box;
|
||||||
|
background-clip:padding-box;
|
||||||
|
background-color:#c00;
|
||||||
|
z-index:10
|
||||||
|
}
|
||||||
|
.timeline .work-place {
|
||||||
|
position:relative
|
||||||
|
}
|
||||||
|
.timeline .location {
|
||||||
|
position:absolute;
|
||||||
|
right:0;
|
||||||
|
top:5px;
|
||||||
|
color:#8a8a8a
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline .place {
|
||||||
|
margin-top:0;
|
||||||
|
margin-bottom:5px;
|
||||||
|
font-size:24px;
|
||||||
|
font-weight:300;
|
||||||
|
margin-left: 50px;
|
||||||
|
}
|
||||||
|
.timeline .job-meta {
|
||||||
|
position:absolute;
|
||||||
|
left:-280px;
|
||||||
|
top:0
|
||||||
|
}
|
||||||
|
.timeline .job-meta .title {
|
||||||
|
font-size:18px;
|
||||||
|
color:#c00;
|
||||||
|
max-width:220px
|
||||||
|
}
|
||||||
|
.timeline .job-meta .time {
|
||||||
|
color:#8a8a8a
|
||||||
|
}
|
||||||
|
.timeline .job-desc {
|
||||||
|
color:#666
|
||||||
|
}
|
||||||
|
.timeline .item-social-icons {
|
||||||
|
left: 0px !important;
|
||||||
|
top: -7px !important;
|
||||||
|
background: #c00 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline .btn-box{
|
||||||
|
position: relative;
|
||||||
|
padding: 6px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline .btn-box a{
|
||||||
|
padding: 8px 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #c00;
|
||||||
|
color: #ffffff;
|
||||||
|
border-top:2px solid transparent;
|
||||||
|
border-bottom:2px solid transparent;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.timeline .note-image{
|
||||||
|
float: left;
|
||||||
|
margin-right: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
max-width: 250px;
|
||||||
|
height: auto;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
|
||||||
|
.timeline {
|
||||||
|
margin-left:0;
|
||||||
|
padding-right:0
|
||||||
|
}
|
||||||
|
|
||||||
|
.timeline .item {
|
||||||
|
margin-bottom:45px !important
|
||||||
|
}
|
||||||
|
.timeline .location {
|
||||||
|
position:relative; }
|
||||||
|
.timeline .place {
|
||||||
|
margin-bottom:5px
|
||||||
|
}
|
||||||
|
.timeline .job-meta {
|
||||||
|
position:static;
|
||||||
|
margin-bottom:15px
|
||||||
|
}
|
||||||
|
.timeline .job-meta .title {
|
||||||
|
max-width:none
|
||||||
|
}
|
||||||
|
}
|
||||||
2337
deployed/mod_mx_timeline/modules/mod_mx_timeline/assets/font-awesome.css
vendored
Normal file
2337
deployed/mod_mx_timeline/modules/mod_mx_timeline/assets/font-awesome.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>
|
||||||
|
<json>
|
||||||
|
<![CDATA[
|
||||||
|
{
|
||||||
|
"fontFamily": "lg",
|
||||||
|
"majorVersion": 1,
|
||||||
|
"minorVersion": 0,
|
||||||
|
"fontURL": "https://github.com/sachinchoolur/lightGallery",
|
||||||
|
"copyright": "sachin",
|
||||||
|
"license": "MLT",
|
||||||
|
"licenseURL": "http://opensource.org/licenses/MIT",
|
||||||
|
"version": "Version 1.0",
|
||||||
|
"fontId": "lg",
|
||||||
|
"psName": "lg",
|
||||||
|
"subFamily": "Regular",
|
||||||
|
"fullName": "lg",
|
||||||
|
"description": "Font generated by IcoMoon."
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</json>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="lg" horiz-adv-x="1024">
|
||||||
|
<font-face units-per-em="1024" ascent="960" descent="-64"/>
|
||||||
|
<missing-glyph horiz-adv-x="1024"/>
|
||||||
|
<glyph unicode=" " horiz-adv-x="512" d=""/>
|
||||||
|
<glyph unicode="" glyph-name="pause_circle_outline" data-tags="pause_circle_outline" d="M554 256.667v340h86v-340h-86zM512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM384 256.667v340h86v-340h-86z"/>
|
||||||
|
<glyph unicode="" glyph-name="play_circle_outline" data-tags="play_circle_outline" d="M512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM426 234.667v384l256-192z"/>
|
||||||
|
<glyph unicode="" glyph-name="stack-2" data-tags="stack-2" d="M384 853.334h426.667q53 0 90.5-37.5t37.5-90.5v-426.667q0-53-37.5-90.5t-90.5-37.5h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 53 37.5 90.5t90.5 37.5zM170.667 675.334v-547.333q0-17.667 12.5-30.167t30.167-12.5h547.333q-13.333-37.667-46.333-61.5t-74.333-23.833h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 41.333 23.833 74.333t61.5 46.333zM810.667 768h-426.667q-17.667 0-30.167-12.5t-12.5-30.167v-426.667q0-17.667 12.5-30.167t30.167-12.5h426.667q17.667 0 30.167 12.5t12.5 30.167v426.667q0 17.667-12.5 30.167t-30.167 12.5z"/>
|
||||||
|
<glyph unicode="" glyph-name="clear" data-tags="clear" d="M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z"/>
|
||||||
|
<glyph unicode="" glyph-name="arrow-left" data-tags="arrow-left" d="M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z"/>
|
||||||
|
<glyph unicode="" glyph-name="arrow-right" data-tags="arrow-right" d="M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z"/>
|
||||||
|
<glyph unicode="" glyph-name="vertical_align_bottom" data-tags="vertical_align_bottom" d="M170 128.667h684v-86h-684v86zM682 384.667l-170-172-170 172h128v426h84v-426h128z"/>
|
||||||
|
<glyph unicode="" glyph-name="apps" data-tags="apps" d="M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z"/>
|
||||||
|
<glyph unicode="" glyph-name="fullscreen" data-tags="fullscreen" d="M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z"/>
|
||||||
|
<glyph unicode="" glyph-name="fullscreen_exit" data-tags="fullscreen_exit" d="M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z"/>
|
||||||
|
<glyph unicode="" glyph-name="zoom_in" data-tags="zoom_in" d="M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z"/>
|
||||||
|
<glyph unicode="" glyph-name="zoom_out" data-tags="zoom_out" d="M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z"/>
|
||||||
|
<glyph unicode="" glyph-name="share" data-tags="share" d="M768 252.667c68 0 124-56 124-124s-56-126-124-126-124 58-124 126c0 10 0 20 2 28l-302 176c-24-22-54-34-88-34-70 0-128 58-128 128s58 128 128 128c34 0 64-12 88-34l300 174c-2 10-4 20-4 30 0 70 58 128 128 128s128-58 128-128-58-128-128-128c-34 0-64 14-88 36l-300-176c2-10 4-20 4-30s-2-20-4-30l304-176c22 20 52 32 84 32z"/>
|
||||||
|
<glyph unicode="" glyph-name="facebook-with-circle" data-tags="facebook-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM628.429 612.659h-73.882c-8.755 0-18.483-11.52-18.483-26.829v-53.35h92.416l-13.978-76.083h-78.438v-228.403h-87.194v228.403h-79.104v76.083h79.104v44.749c0 64.205 44.544 116.378 105.677 116.378h73.882v-80.947z"/>
|
||||||
|
<glyph unicode="" glyph-name="google-with-circle" data-tags="google+-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM483.686 249.805c-30.874-15.002-64.102-16.589-76.954-16.589-2.458 0-3.84 0-3.84 0s-1.178 0-2.765 0c-20.070 0-119.962 4.608-119.962 95.59 0 89.395 108.8 96.41 142.131 96.41h0.87c-19.251 25.702-15.258 51.61-15.258 51.61-1.69-0.102-4.147-0.205-7.168-0.205-12.544 0-36.762 1.997-57.549 15.411-25.498 16.384-38.4 44.288-38.4 82.893 0 109.107 119.142 113.51 120.32 113.613h118.989v-2.611c0-13.312-23.91-15.923-40.192-18.125-5.53-0.819-16.64-1.894-19.763-3.482 30.157-16.128 35.021-41.421 35.021-79.104 0-42.906-16.794-65.587-34.611-81.51-11.059-9.882-19.712-17.613-19.712-28.006 0-10.189 11.878-20.582 25.702-32.717 22.579-19.917 53.555-47.002 53.555-92.723 0-47.258-20.326-81.050-60.416-100.454zM742.4 460.8h-76.8v-76.8h-51.2v76.8h-76.8v51.2h76.8v76.8h51.2v-76.8h76.8v-51.2zM421.018 401.92c-2.662 0-5.325-0.102-8.038-0.307-22.733-1.69-43.725-10.189-58.88-24.013-15.053-13.619-22.733-30.822-21.658-48.179 2.304-36.403 41.37-57.702 88.832-54.323 46.694 3.379 77.824 30.31 75.571 66.714-2.15 34.202-31.898 60.109-75.827 60.109zM465.766 599.808c-12.39 43.52-32.358 56.422-63.386 56.422-3.328 0-6.707-0.512-9.933-1.382-13.466-3.84-24.166-15.053-30.106-31.744-6.093-16.896-6.451-34.509-1.229-54.579 9.472-35.891 34.97-61.901 60.672-61.901 3.379 0 6.758 0.41 9.933 1.382 28.109 7.885 45.722 50.79 34.048 91.802z"/>
|
||||||
|
<glyph unicode="" glyph-name="pinterest-with-circle" data-tags="pinterest-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM545.638 344.32c-31.539 2.406-44.749 18.022-69.427 32.973-13.568-71.219-30.157-139.52-79.309-175.206-15.206 107.725 22.221 188.518 39.629 274.381-29.645 49.92 3.533 150.323 66.099 125.645 76.954-30.515-66.662-185.6 29.747-205.005 100.659-20.173 141.773 174.694 79.36 237.978-90.214 91.494-262.502 2.099-241.306-128.87 5.12-32 38.246-41.728 13.21-85.914-57.702 12.8-74.957 58.317-72.704 118.989 3.533 99.328 89.242 168.909 175.155 178.483 108.698 12.083 210.688-39.885 224.819-142.182 15.821-115.405-49.101-240.282-165.274-231.27z"/>
|
||||||
|
<glyph unicode="" glyph-name="twitter-with-circle" data-tags="twitter-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM711.936 549.683c0.205-4.198 0.256-8.397 0.256-12.493 0-128-97.331-275.507-275.405-275.507-54.682 0-105.574 15.974-148.378 43.52 7.526-0.922 15.258-1.28 23.091-1.28 45.363 0 87.091 15.411 120.218 41.421-42.342 0.819-78.080 28.774-90.419 67.174 5.888-1.075 11.93-1.69 18.176-1.69 8.806 0 17.408 1.178 25.498 3.379-44.288 8.909-77.67 48.026-77.67 94.925v1.178c13.056-7.219 28.006-11.622 43.878-12.134-26.010 17.408-43.059 47.002-43.059 80.64 0 17.715 4.762 34.406 13.107 48.691 47.77-58.573 119.040-97.075 199.526-101.222-1.69 7.117-2.509 14.49-2.509 22.118 0 53.402 43.315 96.819 96.819 96.819 27.802 0 52.992-11.776 70.656-30.618 22.067 4.403 42.752 12.39 61.44 23.501-7.219-22.579-22.528-41.574-42.547-53.606 19.61 2.406 38.246 7.578 55.603 15.309-12.954-19.405-29.389-36.506-48.282-50.125z"/>
|
||||||
|
</font></defs></svg>
|
||||||
|
After Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
<html><body bgcolor="#FFFFFF"></body></html>
|
||||||
877
deployed/mod_mx_timeline/modules/mod_mx_timeline/helper.php
Normal file
877
deployed/mod_mx_timeline/modules/mod_mx_timeline/helper.php
Normal file
@ -0,0 +1,877 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @title Timeline
|
||||||
|
* @version 4.0.1
|
||||||
|
* @copyright Copyright (C) 2020 mixwebtemplates.com, All rights reserved.
|
||||||
|
* @license GNU General Public License version 3 or later.
|
||||||
|
* @author url http://www.mixwebtemplates.com/
|
||||||
|
* @developers mixwebtemplates.com
|
||||||
|
*/
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
jimport('joomla.filesystem.folder');
|
||||||
|
|
||||||
|
if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
$com_path = JPATH_SITE.'/components/com_content/';
|
||||||
|
if (!class_exists('ContentRouter') || !class_exists('ContentHelperRoute'))
|
||||||
|
{
|
||||||
|
require_once $com_path.'router.php';
|
||||||
|
require_once $com_path.'helpers/route.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
JModelLegacy::addIncludePath($com_path . '/models', 'ContentModel');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper for mod_articles_category
|
||||||
|
*
|
||||||
|
* @package Joomla.Site
|
||||||
|
* @subpackage mod_articles_category
|
||||||
|
*/
|
||||||
|
abstract class TimeLineHelper
|
||||||
|
{
|
||||||
|
// Temporary getTagTreeArray function until bug in Joomla has been fixed
|
||||||
|
public static function getTagTreeArray($id, &$tagTreeArray = array())
|
||||||
|
{
|
||||||
|
// Get a level row instance.
|
||||||
|
JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tags/tables'); // This path is missing in Joomla core file. It must be fixed in next version 3.3.7
|
||||||
|
$table = JTable::getInstance('Tag', 'TagsTable');
|
||||||
|
|
||||||
|
if ($table->isLeaf($id))
|
||||||
|
{
|
||||||
|
$tagTreeArray[] = $id;
|
||||||
|
|
||||||
|
return $tagTreeArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tagTree = $table->getTree($id);
|
||||||
|
|
||||||
|
// Attempt to load the tree
|
||||||
|
if ($tagTree)
|
||||||
|
{
|
||||||
|
foreach ($tagTree as $tag)
|
||||||
|
{
|
||||||
|
$tagTreeArray[] = $tag->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $tagTreeArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getList(&$params)
|
||||||
|
{
|
||||||
|
// Get an instance of the generic articles model
|
||||||
|
$articles = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
|
||||||
|
|
||||||
|
// Set application parameters in model
|
||||||
|
$app = JFactory::getApplication();
|
||||||
|
$appParams = $app->getParams();
|
||||||
|
$articles->setState('params', $appParams);
|
||||||
|
|
||||||
|
// Set the filters based on the module params
|
||||||
|
$articles->setState('list.start', 0);
|
||||||
|
$articles->setState('list.limit', (int) $params->get('count', 0));
|
||||||
|
$articles->setState('filter.published', 1);
|
||||||
|
|
||||||
|
// Access filter
|
||||||
|
$access = !JComponentHelper::getParams('com_content')->get('show_noauth');
|
||||||
|
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
|
||||||
|
$articles->setState('filter.access', $access);
|
||||||
|
|
||||||
|
// Prep for Normal or Dynamic Modes
|
||||||
|
$mode = $params->get('mode', 'normal');
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case 'dynamic':
|
||||||
|
$option = $app->input->get('option');
|
||||||
|
$view = $app->input->get('view');
|
||||||
|
if ($option === 'com_content')
|
||||||
|
{
|
||||||
|
switch($view)
|
||||||
|
{
|
||||||
|
case 'category':
|
||||||
|
$catids = array($app->input->getInt('id'));
|
||||||
|
break;
|
||||||
|
case 'categories':
|
||||||
|
$catids = array($app->input->getInt('id'));
|
||||||
|
break;
|
||||||
|
case 'article':
|
||||||
|
if ($params->get('show_on_article_page', 1))
|
||||||
|
{
|
||||||
|
$article_id = $app->input->getInt('id');
|
||||||
|
$catid = $app->input->getInt('catid');
|
||||||
|
|
||||||
|
if (!$catid)
|
||||||
|
{
|
||||||
|
// Get an instance of the generic article model
|
||||||
|
$article = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request' => true));
|
||||||
|
|
||||||
|
$article->setState('params', $appParams);
|
||||||
|
$article->setState('filter.published', 1);
|
||||||
|
$article->setState('article.id', (int) $article_id);
|
||||||
|
$item = $article->getItem();
|
||||||
|
|
||||||
|
$catids = array($item->catid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$catids = array($catid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Return right away if show_on_article_page option is off
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'featured':
|
||||||
|
default:
|
||||||
|
// Return right away if not on the category or article views
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Return right away if not on a com_content page
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'normal':
|
||||||
|
default:
|
||||||
|
$catids = $params->get('catid');
|
||||||
|
$articles->setState('filter.category_id.include', (bool) $params->get('category_filtering_type', 1));
|
||||||
|
|
||||||
|
$tagIds = $params->get('tag_id');
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Category filter
|
||||||
|
if ($catids)
|
||||||
|
{
|
||||||
|
if ($params->get('show_child_category_articles', 0) && (int) $params->get('levels', 0) > 0)
|
||||||
|
{
|
||||||
|
// Get an instance of the generic categories model
|
||||||
|
$categories = JModelLegacy::getInstance('Categories', 'ContentModel', array('ignore_request' => true));
|
||||||
|
$categories->setState('params', $appParams);
|
||||||
|
$levels = $params->get('levels', 1) ? $params->get('levels', 1) : 9999;
|
||||||
|
$categories->setState('filter.get_children', $levels);
|
||||||
|
$categories->setState('filter.published', 1);
|
||||||
|
$categories->setState('filter.access', $access);
|
||||||
|
$additional_catids = array();
|
||||||
|
|
||||||
|
foreach ($catids as $catid)
|
||||||
|
{
|
||||||
|
$categories->setState('filter.parentId', $catid);
|
||||||
|
$recursive = true;
|
||||||
|
$items = $categories->getItems($recursive);
|
||||||
|
|
||||||
|
if ($items)
|
||||||
|
{
|
||||||
|
foreach ($items as $category)
|
||||||
|
{
|
||||||
|
$condition = (($category->level - $categories->getParent()->level) <= $levels);
|
||||||
|
if ($condition)
|
||||||
|
{
|
||||||
|
$additional_catids[] = $category->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$catids = array_unique(array_merge($catids, $additional_catids));
|
||||||
|
}
|
||||||
|
|
||||||
|
$articles->setState('filter.category_id', $catids);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tag filter
|
||||||
|
if ($tagIds)
|
||||||
|
{
|
||||||
|
$includeTagChildren = $params->get('tag_include_children');
|
||||||
|
|
||||||
|
if ($includeTagChildren)
|
||||||
|
{
|
||||||
|
$tagTreeArray = array();
|
||||||
|
|
||||||
|
foreach ($tagIds as $tag)
|
||||||
|
{
|
||||||
|
self::getTagTreeArray($tag, $tagTreeArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
$tagIds = array_unique(array_merge($tagIds, $tagTreeArray));
|
||||||
|
}
|
||||||
|
|
||||||
|
$tagIds = implode(',', $tagIds);
|
||||||
|
|
||||||
|
$articles->setState('filter.tag_id', $tagIds);
|
||||||
|
$articles->setState('filter.tag_id.include', (bool) $params->get('tag_filtering_type'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ordering
|
||||||
|
$articles->setState('list.ordering', $params->get('article_ordering', 'a.ordering'));
|
||||||
|
$articles->setState('list.direction', $params->get('article_ordering_direction', 'ASC'));
|
||||||
|
|
||||||
|
// New Parameters
|
||||||
|
$articles->setState('filter.featured', $params->get('show_front', 'show'));
|
||||||
|
$articles->setState('filter.author_id', $params->get('created_by', ""));
|
||||||
|
$articles->setState('filter.author_id.include', $params->get('author_filtering_type', 1));
|
||||||
|
$articles->setState('filter.author_alias', $params->get('created_by_alias', ""));
|
||||||
|
$articles->setState('filter.author_alias.include', $params->get('author_alias_filtering_type', 1));
|
||||||
|
$excluded_articles = $params->get('excluded_articles', '');
|
||||||
|
|
||||||
|
if ($excluded_articles)
|
||||||
|
{
|
||||||
|
$excluded_articles = explode("\r\n", $excluded_articles);
|
||||||
|
$articles->setState('filter.article_id', $excluded_articles);
|
||||||
|
$articles->setState('filter.article_id.include', false); // Exclude
|
||||||
|
}
|
||||||
|
|
||||||
|
$date_filtering = $params->get('date_filtering', 'off');
|
||||||
|
if ($date_filtering !== 'off')
|
||||||
|
{
|
||||||
|
$articles->setState('filter.date_filtering', $date_filtering);
|
||||||
|
$articles->setState('filter.date_field', $params->get('date_field', 'a.created'));
|
||||||
|
$articles->setState('filter.start_date_range', $params->get('start_date_range', '1000-01-01 00:00:00'));
|
||||||
|
$articles->setState('filter.end_date_range', $params->get('end_date_range', '9999-12-31 23:59:59'));
|
||||||
|
$articles->setState('filter.relative_date', $params->get('relative_date', 30));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by language
|
||||||
|
$articles->setState('filter.language', $app->getLanguageFilter());
|
||||||
|
|
||||||
|
// Get the current user for authorisation checks
|
||||||
|
$user = JFactory::getUser();
|
||||||
|
|
||||||
|
// Create a new query object.
|
||||||
|
$db = JFactory::getDbo();
|
||||||
|
$query = $db->getQuery(true);
|
||||||
|
|
||||||
|
// Select the required fields from the table.
|
||||||
|
$query->select(
|
||||||
|
$articles->getState(
|
||||||
|
'list.select',
|
||||||
|
'a.id, a.title, a.alias, a.introtext, a.fulltext, ' .
|
||||||
|
'a.checked_out, a.checked_out_time, ' .
|
||||||
|
'a.catid, a.created, a.created_by, a.created_by_alias, ' .
|
||||||
|
// Use created if modified is 0
|
||||||
|
'CASE WHEN a.modified = ' . $db->quote($db->getNullDate()) . ' THEN a.created ELSE a.modified END as modified, ' .
|
||||||
|
'a.modified_by, uam.name as modified_by_name,' .
|
||||||
|
// Use created if publish_up is 0
|
||||||
|
'CASE WHEN a.publish_up = ' . $db->quote($db->getNullDate()) . ' THEN a.created ELSE a.publish_up END as publish_up,' .
|
||||||
|
'a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, ' .
|
||||||
|
'a.hits, a.xreference, a.featured,' . ' ' . $query->length('a.fulltext') . ' AS readmore'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Process an Archived Article layout
|
||||||
|
if ($articles->getState('filter.published') == 2)
|
||||||
|
{
|
||||||
|
// If badcats is not null, this means that the article is inside an archived category
|
||||||
|
// In this case, the state is set to 2 to indicate Archived (even if the article state is Published)
|
||||||
|
$query->select($articles->getState('list.select', 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END AS state'));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Process non-archived layout
|
||||||
|
If badcats is not null, this means that the article is inside an unpublished category
|
||||||
|
In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published)
|
||||||
|
*/
|
||||||
|
$query->select($articles->getState('list.select', 'CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$query->from('#__content AS a');
|
||||||
|
|
||||||
|
/*// Join over the frontpage articles.
|
||||||
|
if ($articles->context != 'com_content.featured')
|
||||||
|
{
|
||||||
|
$query->join('LEFT', '#__content_frontpage AS fp ON fp.content_id = a.id');
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// Join over the categories.
|
||||||
|
$query->select('c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias')
|
||||||
|
->join('LEFT', '#__categories AS c ON c.id = a.catid');
|
||||||
|
|
||||||
|
// Join over the users for the author and modified_by names.
|
||||||
|
$query->select("CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author")
|
||||||
|
->select("ua.email AS author_email")
|
||||||
|
|
||||||
|
->join('LEFT', '#__users AS ua ON ua.id = a.created_by')
|
||||||
|
->join('LEFT', '#__users AS uam ON uam.id = a.modified_by');
|
||||||
|
|
||||||
|
// Join over the categories to get parent category titles
|
||||||
|
$query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias')
|
||||||
|
->join('LEFT', '#__categories as parent ON parent.id = c.parent_id');
|
||||||
|
|
||||||
|
// Join on voting table
|
||||||
|
$query->select('ROUND(v.rating_sum / v.rating_count, 0) AS rating, v.rating_count as rating_count')
|
||||||
|
->join('LEFT', '#__content_rating AS v ON a.id = v.content_id');
|
||||||
|
|
||||||
|
// Join to check for category published state in parent categories up the tree
|
||||||
|
$query->select('c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published');
|
||||||
|
$subquery = 'SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent ';
|
||||||
|
$subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt ';
|
||||||
|
$subquery .= 'WHERE parent.extension = ' . $db->quote('com_content');
|
||||||
|
|
||||||
|
if ($articles->getState('filter.published') == 2)
|
||||||
|
{
|
||||||
|
// Find any up-path categories that are archived
|
||||||
|
// If any up-path categories are archived, include all children in archived layout
|
||||||
|
$subquery .= ' AND parent.published = 2 GROUP BY cat.id ';
|
||||||
|
|
||||||
|
// Set effective state to archived if up-path category is archived
|
||||||
|
$publishedWhere = 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Find any up-path categories that are not published
|
||||||
|
// If all categories are published, badcats.id will be null, and we just use the article state
|
||||||
|
$subquery .= ' AND parent.published != 1 GROUP BY cat.id ';
|
||||||
|
|
||||||
|
// Select state to unpublished if up-path category is unpublished
|
||||||
|
$publishedWhere = 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END';
|
||||||
|
}
|
||||||
|
|
||||||
|
$query->join('LEFT OUTER', '(' . $subquery . ') AS badcats ON badcats.id = c.id');
|
||||||
|
|
||||||
|
// Filter by access level.
|
||||||
|
if ($access = $articles->getState('filter.access'))
|
||||||
|
{
|
||||||
|
$groups = implode(',', $user->getAuthorisedViewLevels());
|
||||||
|
$query->where('a.access IN (' . $groups . ')')
|
||||||
|
->where('c.access IN (' . $groups . ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by published state
|
||||||
|
$published = $articles->getState('filter.published');
|
||||||
|
|
||||||
|
if (is_numeric($published))
|
||||||
|
{
|
||||||
|
// Use article state if badcats.id is null, otherwise, force 0 for unpublished
|
||||||
|
$query->where($publishedWhere . ' = ' . (int) $published);
|
||||||
|
}
|
||||||
|
elseif (is_array($published))
|
||||||
|
{
|
||||||
|
JArrayHelper::toInteger($published);
|
||||||
|
$published = implode(',', $published);
|
||||||
|
|
||||||
|
// Use article state if badcats.id is null, otherwise, force 0 for unpublished
|
||||||
|
$query->where($publishedWhere . ' IN (' . $published . ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by featured state
|
||||||
|
$featured = $articles->getState('filter.featured');
|
||||||
|
|
||||||
|
switch ($featured)
|
||||||
|
{
|
||||||
|
case 'hide':
|
||||||
|
$query->where('a.featured = 0');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'only':
|
||||||
|
$query->where('a.featured = 1');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'show':
|
||||||
|
default:
|
||||||
|
// Normally we do not discriminate
|
||||||
|
// between featured/unfeatured items.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by a single or group of articles.
|
||||||
|
$articleId = $articles->getState('filter.article_id');
|
||||||
|
|
||||||
|
if (is_numeric($articleId))
|
||||||
|
{
|
||||||
|
$type = $articles->getState('filter.article_id.include', true) ? '= ' : '<> ';
|
||||||
|
$query->where('a.id ' . $type . (int) $articleId);
|
||||||
|
}
|
||||||
|
elseif (is_array($articleId))
|
||||||
|
{
|
||||||
|
JArrayHelper::toInteger($articleId);
|
||||||
|
$articleId = implode(',', $articleId);
|
||||||
|
$type = $articles->getState('filter.article_id.include', true) ? 'IN' : 'NOT IN';
|
||||||
|
$query->where('a.id ' . $type . ' (' . $articleId . ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by tags
|
||||||
|
if ($tagIds)
|
||||||
|
{
|
||||||
|
$tagtype = $articles->getState('filter.tag_id.include', true) ? 'IN' : 'NOT IN';
|
||||||
|
$tagMatch = $params->get('tag_match');
|
||||||
|
$includeChildren = $params->get('tag_include_children');
|
||||||
|
$tagIdsCount = count(explode(',', $tagIds));
|
||||||
|
|
||||||
|
$query->join('INNER', '#__contentitem_tag_map AS m ON m.content_item_id = a.id');
|
||||||
|
$query->where('m.tag_id ' . $tagtype . ' (' . $tagIds . ')');
|
||||||
|
|
||||||
|
if ($params->get('tag_filtering_type') && !$includeChildren && !$tagMatch)
|
||||||
|
{
|
||||||
|
$query->group('a.id HAVING COUNT(a.id) = '.$tagIdsCount);
|
||||||
|
}
|
||||||
|
else if ($params->get('tag_filtering_type') && $includeChildren)
|
||||||
|
{
|
||||||
|
$query->group('a.id');
|
||||||
|
}
|
||||||
|
else //if (!$params->get('tag_filtering_type'))
|
||||||
|
{
|
||||||
|
$query->group('a.id');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by a single or group of categories
|
||||||
|
$categoryId = $articles->getState('filter.category_id');
|
||||||
|
|
||||||
|
if (is_numeric($categoryId))
|
||||||
|
{
|
||||||
|
$type = $this->getState('filter.category_id.include', true) ? '= ' : '<> ';
|
||||||
|
|
||||||
|
// Add subcategory check
|
||||||
|
$includeSubcategories = $this->getState('filter.subcategories', false);
|
||||||
|
$categoryEquals = 'a.catid ' . $type . (int) $categoryId;
|
||||||
|
|
||||||
|
if ($includeSubcategories)
|
||||||
|
{
|
||||||
|
$levels = (int) $articles->getState('filter.max_category_levels', '1');
|
||||||
|
|
||||||
|
// Create a subquery for the subcategory list
|
||||||
|
$subQuery = $db->getQuery(true)
|
||||||
|
->select('sub.id')
|
||||||
|
->from('#__categories as sub')
|
||||||
|
->join('INNER', '#__categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt')
|
||||||
|
->where('this.id = ' . (int) $categoryId);
|
||||||
|
|
||||||
|
if ($levels >= 0)
|
||||||
|
{
|
||||||
|
$subQuery->where('sub.level <= this.level + ' . $levels);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the subquery to the main query
|
||||||
|
$query->where('(' . $categoryEquals . ' OR a.catid IN (' . $subQuery->__toString() . '))');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$query->where($categoryEquals);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif (is_array($categoryId) && (count($categoryId) > 0))
|
||||||
|
{
|
||||||
|
JArrayHelper::toInteger($categoryId);
|
||||||
|
$categoryId = implode(',', $categoryId);
|
||||||
|
|
||||||
|
if (!empty($categoryId))
|
||||||
|
{
|
||||||
|
$type = $articles->getState('filter.category_id.include', true) ? 'IN' : 'NOT IN';
|
||||||
|
$query->where('a.catid ' . $type . ' (' . $categoryId . ')');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by author
|
||||||
|
$authorId = $articles->getState('filter.author_id');
|
||||||
|
$authorWhere = '';
|
||||||
|
|
||||||
|
if (is_numeric($authorId))
|
||||||
|
{
|
||||||
|
$type = $articles->getState('filter.author_id.include', true) ? '= ' : '<> ';
|
||||||
|
$authorWhere = 'a.created_by ' . $type . (int) $authorId;
|
||||||
|
}
|
||||||
|
elseif (is_array($authorId))
|
||||||
|
{
|
||||||
|
JArrayHelper::toInteger($authorId);
|
||||||
|
$authorId = implode(',', $authorId);
|
||||||
|
|
||||||
|
if ($authorId)
|
||||||
|
{
|
||||||
|
$type = $articles->getState('filter.author_id.include', true) ? 'IN' : 'NOT IN';
|
||||||
|
$authorWhere = 'a.created_by ' . $type . ' (' . $authorId . ')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by author alias
|
||||||
|
$authorAlias = $articles->getState('filter.author_alias');
|
||||||
|
$authorAliasWhere = '';
|
||||||
|
|
||||||
|
if (is_string($authorAlias) && $authorAlias)
|
||||||
|
{
|
||||||
|
$type = $articles->getState('filter.author_alias.include', true) ? '= ' : '<> ';
|
||||||
|
$authorAliasWhere = 'a.created_by_alias ' . $type . $db->quote($authorAlias);
|
||||||
|
}
|
||||||
|
elseif (is_array($authorAlias))
|
||||||
|
{
|
||||||
|
$first = current($authorAlias);
|
||||||
|
|
||||||
|
if (!empty($first))
|
||||||
|
{
|
||||||
|
JArrayHelper::toString($authorAlias);
|
||||||
|
|
||||||
|
foreach ($authorAlias as $key => $alias)
|
||||||
|
{
|
||||||
|
$authorAlias[$key] = $db->quote($alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
$authorAlias = implode(',', $authorAlias);
|
||||||
|
|
||||||
|
if ($authorAlias)
|
||||||
|
{
|
||||||
|
$type = $articles->getState('filter.author_alias.include', true) ? 'IN' : 'NOT IN';
|
||||||
|
$authorAliasWhere = 'a.created_by_alias ' . $type . ' (' . $authorAlias .
|
||||||
|
')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($authorWhere) && !empty($authorAliasWhere))
|
||||||
|
{
|
||||||
|
$query->where('(' . $authorWhere . ' OR ' . $authorAliasWhere . ')');
|
||||||
|
}
|
||||||
|
elseif (empty($authorWhere) && empty($authorAliasWhere))
|
||||||
|
{
|
||||||
|
// If both are empty we don't want to add to the query
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// One of these is empty, the other is not so we just add both
|
||||||
|
$query->where($authorWhere . $authorAliasWhere);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define null and now dates
|
||||||
|
$nullDate = $db->quote($db->getNullDate());
|
||||||
|
$nowDate = $db->quote(JFactory::getDate()->toSql());
|
||||||
|
|
||||||
|
// Filter by start and end dates.
|
||||||
|
if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content')))
|
||||||
|
{
|
||||||
|
$query ->where('(a.publish_up = '.$nullDate.' OR a.publish_up <= '.$nowDate.')')
|
||||||
|
->where('(a.publish_down = '.$nullDate.' OR a.publish_down >= '.$nowDate.')');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by Date Range or Relative Date
|
||||||
|
$dateFiltering = $articles->getState('filter.date_filtering', 'off');
|
||||||
|
$dateField = $articles->getState('filter.date_field', 'a.created');
|
||||||
|
|
||||||
|
switch ($dateFiltering)
|
||||||
|
{
|
||||||
|
case 'range':
|
||||||
|
$startDateRange = $db->quote($articles->getState('filter.start_date_range', $nullDate));
|
||||||
|
$endDateRange = $db->quote($articles->getState('filter.end_date_range', $nullDate));
|
||||||
|
$query->where(
|
||||||
|
'(' . $dateField . ' >= ' . $startDateRange . ' AND ' . $dateField .
|
||||||
|
' <= ' . $endDateRange . ')'
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'relative':
|
||||||
|
$relativeDate = (int) $articles->getState('filter.relative_date', 0);
|
||||||
|
$query->where(
|
||||||
|
$dateField . ' >= DATE_SUB(' . $nowDate . ', INTERVAL ' .
|
||||||
|
$relativeDate . ' DAY)'
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'off':
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process the filter for list views with user-entered filters
|
||||||
|
$articleparams = $articles->getState('params');
|
||||||
|
|
||||||
|
if ((is_object($articleparams)) && ($articleparams->get('filter_field') != 'hide') && ($filter = $articles->getState('list.filter')))
|
||||||
|
{
|
||||||
|
// Clean filter variable
|
||||||
|
$filter = JString::strtolower($filter);
|
||||||
|
$hitsFilter = (int) $filter;
|
||||||
|
$filter = $db->quote('%' . $db->escape($filter, true) . '%', false);
|
||||||
|
|
||||||
|
switch ($articleparams->get('filter_field'))
|
||||||
|
{
|
||||||
|
case 'author':
|
||||||
|
$query->where(
|
||||||
|
'LOWER( CASE WHEN a.created_by_alias > ' . $db->quote(' ') .
|
||||||
|
' THEN a.created_by_alias ELSE ua.name END ) LIKE ' . $filter . ' '
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'hits':
|
||||||
|
$query->where('a.hits >= ' . $hitsFilter . ' ');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'title':
|
||||||
|
default:
|
||||||
|
// Default to 'title' if parameter is not valid
|
||||||
|
$query->where('LOWER( a.title ) LIKE ' . $filter);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by language
|
||||||
|
if ($articles->getState('filter.language'))
|
||||||
|
{
|
||||||
|
$query->where('a.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the list ordering clause.
|
||||||
|
$query->order($articles->getState('list.ordering', 'a.ordering') . ' ' . $articles->getState('list.direction', 'ASC'));
|
||||||
|
|
||||||
|
$db->setQuery($query, $articles->setState('list.start'), $articles->setState('list.limit'));
|
||||||
|
|
||||||
|
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
|
||||||
|
$items = $db->loadObjectList();
|
||||||
|
|
||||||
|
// Display options
|
||||||
|
$show_date = $params->get('show_date', 0);
|
||||||
|
$show_date_field = $params->get('show_date_field', 'created');
|
||||||
|
$show_date_format = $params->get('show_date_format', 'Y-m-d H:i:s');
|
||||||
|
$show_category = $params->get('show_category', 0);
|
||||||
|
$show_hits = $params->get('show_hits', 0);
|
||||||
|
$show_author = $params->get('show_author', 0);
|
||||||
|
$show_introtext = $params->get('show_introtext', 0);
|
||||||
|
$introtext_limit = $params->get('introtext_limit', 15);
|
||||||
|
$title_limit = $params->get('title_limit', 15);
|
||||||
|
|
||||||
|
|
||||||
|
// Find current Article ID if on an article page
|
||||||
|
$option = $app->input->get('option');
|
||||||
|
$view = $app->input->get('view');
|
||||||
|
|
||||||
|
if ($option === 'com_content' && $view === 'article')
|
||||||
|
{
|
||||||
|
$active_article_id = $app->input->getInt('id');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$active_article_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare data for display using display options
|
||||||
|
foreach ($items as &$item)
|
||||||
|
{
|
||||||
|
// General image
|
||||||
|
$item->mainimage = false;
|
||||||
|
$images = json_decode($item->images, true);
|
||||||
|
if ($params->get('image_type')=='introtext' && $images['image_intro'])
|
||||||
|
{
|
||||||
|
$item->mainimage = JURI::root().''.$images['image_intro'];
|
||||||
|
}
|
||||||
|
else if ($params->get('image_type')=='fulltext' && $images['image_fulltext'])
|
||||||
|
{
|
||||||
|
$item->mainimage = JURI::root().''.$images['image_fulltext'];
|
||||||
|
}
|
||||||
|
else if ($params->get('image_type')=='inline')
|
||||||
|
{
|
||||||
|
$introtext_temp = strip_tags($item->introtext, '<img>');
|
||||||
|
preg_match('/<img[^>]+>/i', $introtext_temp, $new_image);
|
||||||
|
$src = false;
|
||||||
|
if ($new_image) {
|
||||||
|
$doc = new DOMDocument();
|
||||||
|
$doc->loadHTML($new_image[0]);
|
||||||
|
$xpath = new DOMXPath($doc);
|
||||||
|
$src = $xpath->evaluate("string(//img/@src)");
|
||||||
|
}
|
||||||
|
if ($src) {
|
||||||
|
$item->mainimage = JURI::root().''.$src;
|
||||||
|
} else {
|
||||||
|
if ($images['image_intro'])
|
||||||
|
{
|
||||||
|
$item->mainimage = JURI::root().''.$images['image_intro'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Image fallback
|
||||||
|
if (!$item->mainimage && $params->get('fallback_image'))
|
||||||
|
{
|
||||||
|
$item->mainimage = JURI::root().''.$params->get('fallback_image');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$item->slug = $item->id.':'.$item->alias;
|
||||||
|
$item->catslug = $item->catid ? $item->catid .':'.$item->category_alias : $item->catid;
|
||||||
|
|
||||||
|
if ($access || in_array($item->access, $authorised))
|
||||||
|
{
|
||||||
|
// We know that user has the privilege to view the article
|
||||||
|
$item->link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$app = JFactory::getApplication();
|
||||||
|
$menu = $app->getMenu();
|
||||||
|
$menuitems = $menu->getItems('link', 'index.php?option=com_users&view=login');
|
||||||
|
if (isset($menuitems[0]))
|
||||||
|
{
|
||||||
|
$Itemid = $menuitems[0]->id;
|
||||||
|
}
|
||||||
|
elseif ($app->input->getInt('Itemid') > 0)
|
||||||
|
{
|
||||||
|
// Use Itemid from requesting page only if there is no existing menu
|
||||||
|
$Itemid = $app->input->getInt('Itemid');
|
||||||
|
}
|
||||||
|
|
||||||
|
$item->link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$Itemid);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used for styling the active article
|
||||||
|
$item->active = $item->id == $active_article_id ? 'active' : '';
|
||||||
|
|
||||||
|
$item->displayDate = '';
|
||||||
|
$item->displayDate = JHTML::_('date', $item->$show_date_field, $show_date_format);
|
||||||
|
|
||||||
|
if ($item->catid)
|
||||||
|
{
|
||||||
|
$item->displayCategoryLink = JRoute::_(ContentHelperRoute::getCategoryRoute($item->catid));
|
||||||
|
$item->displayCategoryTitle = $show_category ? '<a href="'.$item->displayCategoryLink.'">'.$item->category_title.'</a>' : '';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$item->displayCategoryTitle = $show_category ? $item->category_title : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$item->displayHits = $show_hits ? $item->hits : '';
|
||||||
|
$item->displayAuthorName = $show_author ? $item->author : '';
|
||||||
|
|
||||||
|
// Introtext
|
||||||
|
$item->displayIntrotext = $item->introtext;
|
||||||
|
|
||||||
|
// Allow plugins in introtext
|
||||||
|
if (!$params->get( 'allowplugins', 0))
|
||||||
|
{
|
||||||
|
$item->displayIntrotext = preg_replace('/\{.*\}/', '', $item->displayIntrotext);
|
||||||
|
$item->displayIntrotext = preg_replace('/\[.*\]/', '', $item->displayIntrotext);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Plugin events
|
||||||
|
JPluginHelper::importPlugin('content');
|
||||||
|
$item->displayIntrotext = JHtml::_('content.prepare', $item->displayIntrotext);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip tags
|
||||||
|
if ($params->get( 'strip_tags', 1))
|
||||||
|
{
|
||||||
|
$item->displayIntrotext = self::wordLimit($item->displayIntrotext, $introtext_limit);
|
||||||
|
}
|
||||||
|
// Tags
|
||||||
|
$item_tags = new JHelperTags;
|
||||||
|
$item->itemTags = $item_tags->getItemTags('com_content.article', $item->id);
|
||||||
|
|
||||||
|
$item->title = self::wordLimit($item->title, $title_limit);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function _cleanIntrotext($introtext)
|
||||||
|
{
|
||||||
|
$introtext = str_replace('<p>', ' ', $introtext);
|
||||||
|
$introtext = str_replace('</p>', ' ', $introtext);
|
||||||
|
$introtext = strip_tags($introtext, '<a><em><strong>');
|
||||||
|
|
||||||
|
$introtext = trim($introtext);
|
||||||
|
|
||||||
|
return $introtext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getFilters($items, $params)
|
||||||
|
{
|
||||||
|
// Start output
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
// Category Filters
|
||||||
|
if ($params->get('category_filters'))
|
||||||
|
{
|
||||||
|
// Create cat filters
|
||||||
|
$cat_array = array();
|
||||||
|
foreach($items as $key=>$item)
|
||||||
|
{
|
||||||
|
array_push($cat_array, $item->category_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cat_array = array_unique($cat_array);
|
||||||
|
asort($cat_array);
|
||||||
|
$cat_array = array_values($cat_array);
|
||||||
|
|
||||||
|
// Inline filters
|
||||||
|
if ($params->get('filter_labels'))
|
||||||
|
{
|
||||||
|
$output .= '<span>'.JText::_('MOD_MX_TIME_LINE_CATEGORY').'</span>';
|
||||||
|
}
|
||||||
|
$output .= '<a class="active" href="#" data-filter="*">'.JText::_('MOD_MX_TIME_LINE_SHOW_ALL').'</a>';
|
||||||
|
foreach ($cat_array as $category)
|
||||||
|
{
|
||||||
|
$cat_name_fixed = self::cleanName($category);
|
||||||
|
$category = htmlspecialchars($category);
|
||||||
|
$output .= '<a href="#" data-filter=".cat-'.$cat_name_fixed.'">'.$category.'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tag Filters
|
||||||
|
if ($params->get('tag_filters'))
|
||||||
|
{
|
||||||
|
// Create tag filters
|
||||||
|
$tag_array = array();
|
||||||
|
foreach($items as $key=>$item)
|
||||||
|
{
|
||||||
|
if (isset($item->itemTags))
|
||||||
|
{
|
||||||
|
foreach($item->itemTags as $key=>$itemTag)
|
||||||
|
{
|
||||||
|
array_push($tag_array, $itemTag->title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$tag_array = array_unique($tag_array);
|
||||||
|
asort($tag_array);
|
||||||
|
$tag_array = array_values($tag_array);
|
||||||
|
|
||||||
|
// Inline filters
|
||||||
|
if ($params->get('filter_labels'))
|
||||||
|
{
|
||||||
|
$output .= '<span>'.JText::_('MOD_MX_TIME_LINE_TAG').'</span>';
|
||||||
|
}
|
||||||
|
$output .= '<a class="active" href="#" data-filter="*">'.JText::_('MOD_MX_TIME_LINE_SHOW_ALL').'</a>';
|
||||||
|
foreach ($tag_array as $tagName)
|
||||||
|
{
|
||||||
|
$tag_name_fixed = self::cleanName($tagName);
|
||||||
|
$tag = htmlspecialchars($tagName);
|
||||||
|
$output .= '<a href="#" data-filter=".tag-'.$tag_name_fixed.'">'.$tag.'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
|
||||||
|
}
|
||||||
|
public static function cleanName($name)
|
||||||
|
{
|
||||||
|
$name_fixed = preg_replace('/(?=\P{Nd})\P{L}/u', '-', $name);
|
||||||
|
$name_fixed = preg_replace('/[\s-]{2,}/u', '-', $name_fixed);
|
||||||
|
$name_fixed = htmlspecialchars($name_fixed);
|
||||||
|
$name_fixed = trim($name_fixed, "-");
|
||||||
|
|
||||||
|
return $name_fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function wordLimit($str, $limit = 100, $end_char = '…')
|
||||||
|
{
|
||||||
|
if (JString::trim($str) == '')
|
||||||
|
return $str;
|
||||||
|
|
||||||
|
// always strip tags for text
|
||||||
|
$str = strip_tags($str);
|
||||||
|
|
||||||
|
$find = array("/\r|\n/u", "/\t/u", "/\s\s+/u");
|
||||||
|
$replace = array(" ", " ", " ");
|
||||||
|
$str = preg_replace($find, $replace, $str);
|
||||||
|
|
||||||
|
preg_match('/\s*(?:\S*\s*){'.(int)$limit.'}/u', $str, $matches);
|
||||||
|
if (JString::strlen($matches[0]) == JString::strlen($str))
|
||||||
|
$end_char = '';
|
||||||
|
return JString::rtrim($matches[0]).$end_char;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
<html><body bgcolor="#FFFFFF"></body></html>
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @title Timeline
|
||||||
|
* @version 4.0.1
|
||||||
|
* @copyright Copyright (C) 2020 mixwebtemplates.com, All rights reserved.
|
||||||
|
* @license GNU General Public License version 3 or later.
|
||||||
|
* @author url http://www.mixwebtemplates.com/
|
||||||
|
* @developers mixwebtemplates.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// no direct access
|
||||||
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
if(!defined('DS')){
|
||||||
|
define('DS',DIRECTORY_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get Helper function
|
||||||
|
require_once dirname(__FILE__).'/helper.php';
|
||||||
|
|
||||||
|
|
||||||
|
// Add stylesheets
|
||||||
|
$document = JFactory::getDocument();
|
||||||
|
|
||||||
|
|
||||||
|
$items = TimeLineHelper::getList($params);
|
||||||
|
|
||||||
|
$filters = TimeLineHelper::getFilters($items, $params);
|
||||||
|
require JModuleHelper::getLayoutPath('mod_mx_timeline', $params->get('get_style', 'style6'));
|
||||||
@ -0,0 +1,545 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<extension type="module" client="site" version="1.7.0" method="upgrade">
|
||||||
|
<name>Timeline</name>
|
||||||
|
<author>mixwebtemplates</author>
|
||||||
|
<creationDate>Jan 27, 2020</creationDate>
|
||||||
|
<copyright>Copyright (C) http://www.mixwebtemplates.com. All rights reserved.</copyright>
|
||||||
|
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
|
||||||
|
<authorEmail>support@mixwebtemplates.com</authorEmail>
|
||||||
|
<authorUrl>www.mixwebtemplates.com</authorUrl>
|
||||||
|
<version>4.0.3</version>
|
||||||
|
<description>
|
||||||
|
<![CDATA[<link href="../modules/mod_mx_timeline/assets/css/admin.css" rel="stylesheet" type="text/css" media="all" />
|
||||||
|
<h1>Timeline free version</h1>
|
||||||
|
<div style="margin:0 0 0 10px; font-size:15px;">Timeline free version from <a href="http://www.mixwebtemplates.com" target="_blank">mixwebtemplates.com</a>. In Free version is available only style 6. If you interested in other styles please visit <a href="https://www.mixwebtemplates.com/joomla-extensions/item/261-timeline-joomla-module" target="_blank">timeline module page</a></div>
|
||||||
|
<h3>Userful links</h3>
|
||||||
|
<ul><li><a target='_blank' href='https://www.mixwebtemplates.com/joomla-templates'>Joomla templates</a></li>
|
||||||
|
<li><a target='_blank' href='https://www.mixwebtemplates.com/contact'>Report bug</a></li></ul></p>
|
||||||
|
|
||||||
|
<div class="footer_review">
|
||||||
|
Like this extensions? <a href="https://extensions.joomla.org/extension/news-display/articles-display/mx-timeline/" target="_blank">Leave a review on JED</a>
|
||||||
|
<a class="stars" href="https://extensions.joomla.org/extension/news-display/articles-display/mx-timeline/" target="_blank">
|
||||||
|
<span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
]]></description>
|
||||||
|
|
||||||
|
<files>
|
||||||
|
<filename module="mod_mx_timeline">mod_mx_timeline.php</filename>
|
||||||
|
<filename>helper.php</filename>
|
||||||
|
<filename>index.html</filename>
|
||||||
|
<folder>assets</folder>
|
||||||
|
<folder>tmpl</folder>
|
||||||
|
</files>
|
||||||
|
|
||||||
|
<languages>
|
||||||
|
<language tag="en-GB">en-GB.mod_mx_timeline.ini</language>
|
||||||
|
<language tag="en-GB">en-GB.mod_mx_timeline.sys.ini</language>
|
||||||
|
</languages>
|
||||||
|
|
||||||
|
<updateservers>
|
||||||
|
<server type="extension" priority="1" name="Timeline"><![CDATA[https://www.mixwebtemplates.com/updates/mod_mx_timeline_free.xml]]></server>
|
||||||
|
</updateservers>
|
||||||
|
|
||||||
|
<config>
|
||||||
|
<fields name="params">
|
||||||
|
|
||||||
|
<fieldset name="basic">
|
||||||
|
<field name="get_style" type="list" default="style6" label="Style" description="Select a style" >
|
||||||
|
<option value="default" disabled="true">Default (pro)</option>
|
||||||
|
<option value="style1" disabled="true">Style 1 (pro)</option>
|
||||||
|
<option value="style2" disabled="true">Style 2 (pro)</option>
|
||||||
|
<option value="style3" disabled="true">Style 3 (pro)</option>
|
||||||
|
<option value="style4" disabled="true">Style 4 (pro)</option>
|
||||||
|
<option value="style5" disabled="true">Style 5 (pro)</option>
|
||||||
|
<option value="style6">Style 6</option>
|
||||||
|
<option value="style5" disabled="true">Style 7 (pro)</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field name="bgm_color" type="color" format="rgba" default="" label="Custom Color" description="Custom color" />
|
||||||
|
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="moduleclass_sfx"
|
||||||
|
type="textarea"
|
||||||
|
rows="3"
|
||||||
|
label="MOD_MX_TIME_LINE_CLASS_SUFFIX_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_CLASS_SUFFIX_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="auto_module_id"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_AUTO_MODULE_ID_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_AUTO_MODULE_ID_DESC">
|
||||||
|
<option value="0">JNo</option>
|
||||||
|
<option value="1">JYes</option>
|
||||||
|
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="custom_module_id"
|
||||||
|
type="text"
|
||||||
|
default=""
|
||||||
|
label="MOD_MX_TIME_LINE_CUSTOM_MODULE_ID_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_CUSTOM_MODULE_ID_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
|
||||||
|
<fieldset name="DataSource" label="MOD_MX_TIME_LINE_DATA_SOURCE">
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="count"
|
||||||
|
type="text"
|
||||||
|
default="5"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_COUNT_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_COUNT_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="image_type"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="introtext"
|
||||||
|
label="MOD_MX_TIME_LINE_IMAGE_TYPE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_IMAGE_TYPE_DESC"
|
||||||
|
>
|
||||||
|
<option value="introtext">Intro Image</option>
|
||||||
|
<option value="fulltext">Fulltext Image</option>
|
||||||
|
<option value="inline">Inline Image</option>
|
||||||
|
</field>
|
||||||
|
<field name="filteringspacer6" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="category_filtering_type"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_CATFILTERINGTYPE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_CATFILTERINGTYPE_DESC"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="catid"
|
||||||
|
type="category"
|
||||||
|
extension="com_content"
|
||||||
|
multiple="true" size="5"
|
||||||
|
label="JCATEGORY"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_CATEGORY_DESC"
|
||||||
|
>
|
||||||
|
<option value="">JOPTION_ALL_CATEGORIES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field name="show_child_category_articles"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="0"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_SHOWCHILDCATEGORYARTICLES_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_SHOWCHILDCATEGORYARTICLES_DESC"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUDE_VALUE</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUDE_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="levels"
|
||||||
|
type="text"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_CATDEPTH_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_CATDEPTH_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field name="filteringspacer_tags" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="tag_filtering_type"
|
||||||
|
type="radio"
|
||||||
|
default="1"
|
||||||
|
class="btn-group"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_TAG_FILTERING_TYPE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_TAG_FILTERING_TYPE_DESC"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="tag_id"
|
||||||
|
type="tag"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_TAG_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_TAG_DESC"
|
||||||
|
custom="deny"
|
||||||
|
multiple="true"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="tag_include_children"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_TAG_INCLUDE_CHILDREN_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_TAG_INCLUDE_CHILDREN_DESC"
|
||||||
|
default="1"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUDE_VALUE</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUDE_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="tag_match"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_TAG_MATCH_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_TAG_MATCH_DESC"
|
||||||
|
default="1"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_TAG_MATCH_ANY</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_TAG_MATCH_ALL</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field name="filteringspacer2" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="author_filtering_type"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_AUTHORFILTERING_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_AUTHORFILTERING_DESC"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="created_by"
|
||||||
|
type="sql"
|
||||||
|
multiple="true"
|
||||||
|
size="5"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_AUTHOR_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_AUTHOR_DESC"
|
||||||
|
query="select id, name, username from #__users where id IN (select distinct(created_by) from #__content) order by name ASC"
|
||||||
|
key_field="id"
|
||||||
|
value_field="name"
|
||||||
|
>
|
||||||
|
<option value="">JOPTION_SELECT_AUTHORS</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field name="filteringspacer3" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="author_alias_filtering_type"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_AUTHORALIASFILTERING_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_AUTHORALIASFILTERING_DESC"
|
||||||
|
>
|
||||||
|
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
|
||||||
|
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="created_by_alias"
|
||||||
|
type="sql"
|
||||||
|
multiple="true"
|
||||||
|
size="5"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_AUTHORALIAS_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_AUTHORALIAS_DESC"
|
||||||
|
query="select distinct(created_by_alias) from #__content where created_by_alias != '' order by created_by_alias ASC"
|
||||||
|
key_field="created_by_alias"
|
||||||
|
value_field="created_by_alias"
|
||||||
|
>
|
||||||
|
<option value="">JOPTION_SELECT_AUTHOR_ALIASES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field name="filteringspacer4" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="show_front"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="show"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_SHOWFEATURED_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_SHOWFEATURED_DESC"
|
||||||
|
>
|
||||||
|
<option value="show">JSHOW</option>
|
||||||
|
<option value="hide">JHIDE</option>
|
||||||
|
<option value="only">MOD_MX_TIME_LINE_CATEGORY_OPTION_ONLYFEATURED_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field name="filteringspacer7" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="date_filtering"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="off"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_DATEFILTERING_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_DATEFILTERING_DESC"
|
||||||
|
>
|
||||||
|
<option value="off">MOD_MX_TIME_LINE_CATEGORY_OPTION_OFF_VALUE</option>
|
||||||
|
<option value="range">MOD_MX_TIME_LINE_CATEGORY_OPTION_DATERANGE_VALUE</option>
|
||||||
|
<option value="relative">MOD_MX_TIME_LINE_CATEGORY_OPTION_RELATIVEDAY_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="date_field"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="a.created"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_DATERANGEFIELD_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_DATERANGEFIELD_DESC"
|
||||||
|
>
|
||||||
|
<option value="a.created">MOD_MX_TIME_LINE_CATEGORY_OPTION_CREATED_VALUE</option>
|
||||||
|
<option value="a.modified">MOD_MX_TIME_LINE_CATEGORY_OPTION_MODIFIED_VALUE</option>
|
||||||
|
<option value="a.publish_up">MOD_MX_TIME_LINE_CATEGORY_OPTION_STARTPUBLISHING_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="start_date_range"
|
||||||
|
type="calendar"
|
||||||
|
format="%Y-%m-%d %H:%M:%S"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_STARTDATE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_STARTDATE_DESC"
|
||||||
|
size="22"
|
||||||
|
filter="user_utc"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="end_date_range"
|
||||||
|
type="calendar"
|
||||||
|
format="%Y-%m-%d %H:%M:%S"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_ENDDATE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_ENDDATE_DESC"
|
||||||
|
size="22"
|
||||||
|
filter="user_utc"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="relative_date"
|
||||||
|
type="text"
|
||||||
|
default="30"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_RELATIVEDATE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_RELATIVEDATE_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="show_date_field"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="created"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_DATEFIELD_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_DATEFIELD_DESC"
|
||||||
|
>
|
||||||
|
<option value="created">MOD_MX_TIME_LINE_CATEGORY_OPTION_CREATED_VALUE</option>
|
||||||
|
<option value="modified">MOD_MX_TIME_LINE_CATEGORY_OPTION_MODIFIED_VALUE</option>
|
||||||
|
<option value="publish_up">MOD_MX_TIME_LINE_CATEGORY_OPTION_STARTPUBLISHING_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="show_date_format"
|
||||||
|
type="text"
|
||||||
|
default="Y-m-d H:i:s"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_DATEFIELDFORMAT_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_DATEFIELDFORMAT_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field name="filteringspacer8" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="excluded_articles"
|
||||||
|
type="textarea"
|
||||||
|
cols="10"
|
||||||
|
rows="3"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_EXCLUDEDARTICLES_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_EXCLUDEDARTICLES_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field name="filteringspacer5" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="article_ordering"
|
||||||
|
type="list"
|
||||||
|
default="a.title"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERING_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERING_DESC"
|
||||||
|
>
|
||||||
|
<option value="a.ordering">MOD_MX_TIME_LINE_CATEGORY_OPTION_ORDERING_VALUE</option>
|
||||||
|
<option value="fp.ordering">MOD_MX_TIME_LINE_CATEGORY_OPTION_ORDERINGFEATURED_VALUE</option>
|
||||||
|
<option value="a.hits">MOD_MX_TIME_LINE_CATEGORY_OPTION_HITS_VALUE</option>
|
||||||
|
<option value="a.title">JGLOBAL_TITLE</option>
|
||||||
|
<option value="a.id">MOD_MX_TIME_LINE_CATEGORY_OPTION_ID_VALUE</option>
|
||||||
|
<option value="a.alias">JFIELD_ALIAS_LABEL</option>
|
||||||
|
<option value="a.created">MOD_MX_TIME_LINE_CATEGORY_OPTION_CREATED_VALUE</option>
|
||||||
|
<option value="modified">MOD_MX_TIME_LINE_CATEGORY_OPTION_MODIFIED_VALUE</option>
|
||||||
|
<option value="publish_up">MOD_MX_TIME_LINE_CATEGORY_OPTION_STARTPUBLISHING_VALUE</option>
|
||||||
|
<option value="a.publish_down">MOD_MX_TIME_LINE_CATEGORY_OPTION_FINISHPUBLISHING_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="article_ordering_direction"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="ASC"
|
||||||
|
label="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERINGDIR_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERINGDIR_DESC"
|
||||||
|
>
|
||||||
|
<option value="DESC">MOD_MX_TIME_LINE_CATEGORY_OPTION_DESCENDING_VALUE</option>
|
||||||
|
<option value="ASC">MOD_MX_TIME_LINE_CATEGORY_OPTION_ASCENDING_VALUE</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset name="TIME_LINE_CONFIG_SETTINGS">
|
||||||
|
<field name="image_spacer" type="spacer" hr="true" />
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="slider_title"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_TITLE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_TITLE_DESC"
|
||||||
|
>
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="title_limit"
|
||||||
|
type="text"
|
||||||
|
default="15"
|
||||||
|
label="MOD_MX_TIME_LINE_TITLE_LIMIT_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_TITLE_LIMIT_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="slider_introtext"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_INTROTEXT_LABEL"
|
||||||
|
|
||||||
|
description="MOD_MX_TIME_LINE_INTROTEXT_DESC"
|
||||||
|
>
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="introtext_limit"
|
||||||
|
type="text"
|
||||||
|
default="15"
|
||||||
|
label="MOD_MX_TIME_LINE_INTROTEXT_LIMIT_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_INTROTEXT_LIMIT_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="strip_tags"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_STRIP_HTML_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_STRIP_HTML_DESC">
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="allowplugins"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="1"
|
||||||
|
label="MOD_MX_TIME_LINE_ALLOW_PLUGINS_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_ALLOW_PLUGINS_DESC">
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="slider_read"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="0"
|
||||||
|
label="Show read more"
|
||||||
|
description="Show read more"
|
||||||
|
>
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
<field
|
||||||
|
name="slider_date"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="0"
|
||||||
|
label="MOD_MX_TIME_LINE_DATE_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_DATE_DESC"
|
||||||
|
>
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="slider_category"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="0"
|
||||||
|
label="MOD_MX_TIME_LINE_CATEGORY_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_CATEGORY_DESC"
|
||||||
|
>
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="slider_author"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="0"
|
||||||
|
label="MOD_MX_TIME_LINE_AUTHOR_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_AUTHOR_DESC"
|
||||||
|
>
|
||||||
|
<option value="0">JNO</option>
|
||||||
|
<option value="1">JYES</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
|
||||||
|
<fieldset name="advanced">
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="enable_cache"
|
||||||
|
type="radio"
|
||||||
|
class="btn-group"
|
||||||
|
default="0"
|
||||||
|
label="MOD_MX_TIME_LINE_CACHING_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_CACHING_DESC"
|
||||||
|
>
|
||||||
|
<option value="1">Use global</option>
|
||||||
|
<option value="0">No caching</option>
|
||||||
|
</field>
|
||||||
|
|
||||||
|
<field
|
||||||
|
name="cache_time"
|
||||||
|
type="text"
|
||||||
|
default="30"
|
||||||
|
label="MOD_MX_TIME_LINE_CACHE_TIME_LABEL"
|
||||||
|
description="MOD_MX_TIME_LINE_CACHE_TIME_DESC"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
</fields>
|
||||||
|
</config>
|
||||||
|
|
||||||
|
</extension>
|
||||||
@ -0,0 +1 @@
|
|||||||
|
<html><body bgcolor="#FFFFFF"></body></html>
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @title Timeline
|
||||||
|
* @version 4.0.1
|
||||||
|
* @copyright Copyright (C) 2019 mixwebtemplates.com, All rights reserved.
|
||||||
|
* @license GNU General Public License version 3 or later.
|
||||||
|
* @author url http://www.mixwebtemplates.com/
|
||||||
|
* @developers mixwebtemplates.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// no direct access
|
||||||
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
$cacheFolder = JURI::base(true).'/cache/';
|
||||||
|
$modID = $module->id;
|
||||||
|
$modPath = JURI::base(true).'/modules/mod_mx_timeline/';
|
||||||
|
$document = JFactory::getDocument();
|
||||||
|
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
|
||||||
|
$jqueryload = $params->get('jqueryload');
|
||||||
|
$customone = $params->get('customone');
|
||||||
|
$hgstyle = $params->get('hgstyle');
|
||||||
|
$customstyle = $params->get('customstyle');
|
||||||
|
$bgm_color = $params->get('bgm_color');
|
||||||
|
$sliderid = $params->get('sliderid');
|
||||||
|
$borderradius = $params->get('borderradius');
|
||||||
|
// Define parameters
|
||||||
|
$module_id = $module->id;
|
||||||
|
if ($params->get('auto_module_id')) {
|
||||||
|
$sliderid = 'olk2sl'.$module->id;
|
||||||
|
} else {
|
||||||
|
$sliderid = $params->get('custom_module_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$document->addStyleSheet($modPath.'assets/css/font-awesome.css');
|
||||||
|
$document->addStyleSheet($modPath.'assets/css/style6.css');
|
||||||
|
|
||||||
|
if($bgm_color) $document->addStyleDeclaration('#tmln' . $sliderid . ' .timeline .item:after, #tmln' . $sliderid . ' .timeline .item-social-icons, #tmln' . $sliderid . ' .timeline .btn-box a{ background-color: ' . $bgm_color . ' !important;}#tmln' . $sliderid . ' .timeline .job-meta .title { color: ' . $bgm_color . ' !important;}#tmln' . $sliderid . ' .timeline .item::before, #tmln' . $sliderid . ' .timeline {border-color: ' . $bgm_color . ';} ');
|
||||||
|
|
||||||
|
$modpath = JURI::root(true).'/modules/' . $module->module;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div id="tmln<?php echo $sliderid ?>">
|
||||||
|
<div class="timeline">
|
||||||
|
<?php if (count($items)) { ?>
|
||||||
|
<?php foreach($items as $item) { ?>
|
||||||
|
<div class="item">
|
||||||
|
<div class="work-place">
|
||||||
|
<?php if($params->get('slider_title')) { ?><div class="place"><a href="<?php echo $item->link; ?>"><?php echo $item->title; ?></a></div><?php } ?>
|
||||||
|
<?php if($params->get('slider_author')) { ?><div class="location"> <?php echo JText::_('MOD_MX_TIME_LINE_BY'); ?> <?php echo $item->author; ?></div><?php } ?>
|
||||||
|
</div>
|
||||||
|
<div class="job-meta">
|
||||||
|
<?php if($params->get('slider_category')) { ?><div class="title"><?php echo JText::_('MOD_MX_TIME_LINE_IN'); ?> <a href="<?php echo $item->displayCategoryLink; ?>"><?php echo $item->category_title; ?></a></div> <?php } ?>
|
||||||
|
<?php if ($params->get('slider_date')) { ?><div class="time"><?php echo $item->displayDate; ?></div><?php } ?>
|
||||||
|
</div><!--//job-meta-->
|
||||||
|
<div class="job-desc">
|
||||||
|
<?php if($item->mainimage != '') : ?>
|
||||||
|
<div class="note-image">
|
||||||
|
<img src="<?php echo $item->mainimage ?>" alt="<?php echo $item->title?>" />
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if($params->get('slider_introtext')) { ?><p class="note-desc"><?php echo $item->displayIntrotext; ?></p><?php } ?>
|
||||||
|
<?php if($params->get('slider_read')) { ?>
|
||||||
|
<div class="btn-box">
|
||||||
|
<a href="<?php echo $item->link; ?>" class="theme-btn"><?php echo JText::_('MOD_MX_TIME_LINE_READ_MORE'); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php } ?> </div><!--//job-desc-->
|
||||||
|
</div>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
<?php } ?>
|
||||||
|
<?php } ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php if($params->get('item_shares')== 1): ?>
|
||||||
|
<script src="<?php echo $modPath ?>assets/js/social.js" type="text/javascript"></script>
|
||||||
|
<?php endif; ?>
|
||||||
Loading…
Reference in New Issue
Block a user