@@ -33,7 +33,7 @@ public static function ssp(&$editor, &$query, $http)
3333 if ($ type === 'num ' ) {
3434 self ::_sspNumber ($ query , $ field , $ value , $ logic );
3535 } elseif ($ type === 'date ' ) {
36- self ::_sspDate ($ query , $ field , $ value , $ logic );
36+ self ::_sspDate ($ query , $ field , $ value , $ logic, $ search [ ' mask ' ] );
3737 } else {
3838 self ::_sspText ($ query , $ field , $ value , $ logic );
3939 }
@@ -57,8 +57,24 @@ public static function ssp(&$editor, &$query, $http)
5757 * @param string $value Search term
5858 * @param string $logic Search logic
5959 */
60- private static function _sspDate (&$ query , $ field , $ value , $ logic )
60+ private static function _sspDate (&$ query , $ field , $ value , $ logic, $ mask )
6161 {
62+ $ bindingName = $ query ->bindName ();
63+ $ dbField = $ field ->dbField ();
64+ $ search = $ bindingName ;
65+
66+ // Only support date and time masks. This departs from the client side which allows
67+ // any component in the date/time to be masked out.
68+ if ($ mask === 'YYYY-MM-DD ' ) {
69+ $ dbField = 'DATE( ' . $ dbField . ') ' ;
70+ $ search = 'DATE( ' . $ bindingName . ') ' ;
71+ } elseif ($ mask === 'hh:mm:ss ' ) {
72+ $ dbField = 'TIME( ' . $ dbField . ') ' ;
73+ $ search = 'TIME( ' . $ bindingName . ') ' ;
74+ } else {
75+ $ search = '( ' . $ bindingName . ') ' ;
76+ }
77+
6278 if ($ logic === 'empty ' ) {
6379 $ query ->where ($ field ->dbField (), null );
6480 } elseif ($ logic === 'notEmpty ' ) {
@@ -67,13 +83,21 @@ private static function _sspDate(&$query, $field, $value, $logic)
6783 // Empty search value means no search for the other logic operators
6884 return ;
6985 } elseif ($ logic === 'equal ' ) {
70- $ query ->where ($ field ->dbField (), $ value );
86+ $ query
87+ ->where ($ dbField , $ search , '= ' , false )
88+ ->bind ($ bindingName , $ value );
7189 } elseif ($ logic === 'notEqual ' ) {
72- $ query ->where ($ field ->dbField (), $ value , '!= ' );
90+ $ query
91+ ->where ($ dbField , $ search , '!= ' , false )
92+ ->bind ($ bindingName , $ value );
7393 } elseif ($ logic === 'greater ' ) {
74- $ query ->where ($ field ->dbField (), $ value , '> ' );
94+ $ query
95+ ->where ($ dbField , $ search , '> ' , false )
96+ ->bind ($ bindingName , $ value );
7597 } elseif ($ logic === 'less ' ) {
76- $ query ->where ($ field ->dbField (), $ value , '< ' );
98+ $ query
99+ ->where ($ dbField , $ search , '< ' , false )
100+ ->bind ($ bindingName , $ value );
77101 }
78102 }
79103
0 commit comments