From c97db0e5e3bb01c477cab90b7cb18432c6649d2a Mon Sep 17 00:00:00 2001 From: Romain Quetiez Date: Tue, 8 Sep 2009 15:10:31 +0000 Subject: [PATCH] Improved the run query page: added meaningfull examples, including "ticket of the user currently logged in", and did some cosmetics on the page (examples shown in a drawer) ; needed to add some options to the OQL (date intervals) SVN:trunk[122] --- .../userrights/userrightsmatrix.class.inc.php | 6 + .../userrights/userrightsnull.class.inc.php | 6 + .../userrightsprofile.class.inc.php | 27 +- core/metamodel.class.php | 4 + core/oql/oql-lexer.php | 34 +- core/oql/oql-lexer.plex | 12 + core/oql/oql-parser.php | 895 +++++++++--------- core/oql/oql-parser.y | 3 + core/userrights.class.inc.php | 11 + pages/run_query.php | 90 +- 10 files changed, 598 insertions(+), 490 deletions(-) diff --git a/addons/userrights/userrightsmatrix.class.inc.php b/addons/userrights/userrightsmatrix.class.inc.php index 8341f6cdf..aacdd2020 100644 --- a/addons/userrights/userrightsmatrix.class.inc.php +++ b/addons/userrights/userrightsmatrix.class.inc.php @@ -336,6 +336,12 @@ class UserRightsMatrix extends UserRightsAddOnAPI return $oLogin->Get('userid'); } + public function GetContactId($sUserName) + { + // this module has no link with the business data + return null; + } + public function GetFilter($sUserName, $sClass) { $oNullFilter = new DBObjectSearch($sClass); diff --git a/addons/userrights/userrightsnull.class.inc.php b/addons/userrights/userrightsnull.class.inc.php index 79a8600a7..2d58eac41 100644 --- a/addons/userrights/userrightsnull.class.inc.php +++ b/addons/userrights/userrightsnull.class.inc.php @@ -47,6 +47,12 @@ class UserRightsNull extends UserRightsAddOnAPI return 1; } + public function GetContactId($sUserName) + { + // this module has no link with the business data + return null; + } + public function GetFilter($sUserName, $sClass) { $oNullFilter = new DBObjectSearch($sClass); diff --git a/addons/userrights/userrightsprofile.class.inc.php b/addons/userrights/userrightsprofile.class.inc.php index d71bcf607..75d582cfc 100644 --- a/addons/userrights/userrightsprofile.class.inc.php +++ b/addons/userrights/userrightsprofile.class.inc.php @@ -733,6 +733,8 @@ class UserRightsProfile extends UserRightsAddOnAPI protected $m_aUserProfiles = array(); // userid,profileid -> object protected $m_aProPro = array(); // profileid,dimensionid -> object + protected $m_aLogin2UserId = array(); // login -> id + protected $m_aAdmins = array(); // id of users being linked to the profile #ADMIN_PROFILE_ID protected $m_aClassActionGrants = array(); // profile, class, action -> permission @@ -746,7 +748,8 @@ class UserRightsProfile extends UserRightsAddOnAPI $oUserSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_Users")); while ($oUser = $oUserSet->Fetch()) { - $this->m_aUsers[$oUser->GetKey()] = $oUser; + $this->m_aUsers[$oUser->GetKey()] = $oUser; + $this->m_aLogin2UserId[$oUser->Get('login')] = $oUser->GetKey(); } $oDimensionSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_Dimensions")); @@ -818,15 +821,25 @@ exit; public function GetUserId($sUserName) { - $oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_Users WHERE login = :login"), array(), array('login' => $sUserName)); - if ($oSet->Count() < 1) + if (array_key_exists($sUserName, $this->m_aLogin2UserId)) { - // todo: throw an exception? - return false; + // This happens really when the list of users is being loaded into the cache!!! + $iUserId = $this->m_aLogin2UserId[$sUserName]; + return $iUserId; } + return null; + } - $oUser = $oSet->Fetch(); - return $oUser->GetKey(); + public function GetContactId($sUserName) + { + if (array_key_exists($sUserName, $this->m_aLogin2UserId)) + { + // This happens really when the list of users is being loaded into the cache!!! + $iUserId = $this->m_aLogin2UserId[$sUserName]; + $oUser = $this->m_aUsers[$iUserId]; + return $oUser->Get('userid'); + } + return null; } public function GetFilter($sUserName, $sClass) diff --git a/core/metamodel.class.php b/core/metamodel.class.php index b05524b39..3e79c0a17 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -1202,6 +1202,10 @@ abstract class MetaModel $aScalarArgs[$sArgName] = (string) $value; } } + // Add standard contextual arguments + // + $aScalarArgs['current_contact_id'] = UserRights::GetContactId(); + return $aScalarArgs; } diff --git a/core/oql/oql-lexer.php b/core/oql/oql-lexer.php index 8853786ff..1422bf5f2 100644 --- a/core/oql/oql-lexer.php +++ b/core/oql/oql-lexer.php @@ -125,6 +125,9 @@ class OQLLexerRaw '/^YEAR/', '/^MONTH/', '/^DAY/', + '/^HOUR/', + '/^MINUTE/', + '/^SECOND/', '/^DATE_ADD/', '/^DATE_SUB/', '/^ROUND/', @@ -444,44 +447,59 @@ class OQLLexerRaw function yy_r1_43($yy_subpatterns) { - $this->token = OQLParser::F_DATE_ADD; + $this->token = OQLParser::F_HOUR; } function yy_r1_44($yy_subpatterns) { - $this->token = OQLParser::F_DATE_SUB; + $this->token = OQLParser::F_MINUTE; } function yy_r1_45($yy_subpatterns) { - $this->token = OQLParser::F_ROUND; + $this->token = OQLParser::F_SECOND; } function yy_r1_46($yy_subpatterns) { - $this->token = OQLParser::F_FLOOR; + $this->token = OQLParser::F_DATE_ADD; } function yy_r1_47($yy_subpatterns) { - $this->token = OQLParser::NUMVAL; + $this->token = OQLParser::F_DATE_SUB; } function yy_r1_48($yy_subpatterns) { - $this->token = OQLParser::STRVAL; + $this->token = OQLParser::F_ROUND; } function yy_r1_49($yy_subpatterns) { - $this->token = OQLParser::NAME; + $this->token = OQLParser::F_FLOOR; } function yy_r1_50($yy_subpatterns) { - $this->token = OQLParser::VARNAME; + $this->token = OQLParser::NUMVAL; } function yy_r1_51($yy_subpatterns) + { + + $this->token = OQLParser::STRVAL; + } + function yy_r1_52($yy_subpatterns) + { + + $this->token = OQLParser::NAME; + } + function yy_r1_53($yy_subpatterns) + { + + $this->token = OQLParser::VARNAME; + } + function yy_r1_54($yy_subpatterns) { $this->token = OQLParser::DOT; diff --git a/core/oql/oql-lexer.plex b/core/oql/oql-lexer.plex index c8e90dda1..d4a23500b 100644 --- a/core/oql/oql-lexer.plex +++ b/core/oql/oql-lexer.plex @@ -97,6 +97,9 @@ f_from_days = "FROM_DAYS" f_year = "YEAR" f_month = "MONTH" f_day = "DAY" +f_hour = "HOUR" +f_minute = "MINUTE" +f_second = "SECOND" f_date_add = "DATE_ADD" f_date_sub = "DATE_SUB" f_round = "ROUND" @@ -238,6 +241,15 @@ f_month { f_day { $this->token = OQLParser::F_DAY; } +f_hour { + $this->token = OQLParser::F_HOUR; +} +f_minute { + $this->token = OQLParser::F_MINUTE; +} +f_second { + $this->token = OQLParser::F_SECOND; +} f_date_add { $this->token = OQLParser::F_DATE_ADD; } diff --git a/core/oql/oql-parser.php b/core/oql/oql-parser.php index e66f48274..7913b3d1d 100644 --- a/core/oql/oql-parser.php +++ b/core/oql/oql-parser.php @@ -121,49 +121,52 @@ class OQLParserRaw#line 102 "oql-parser.php" const PAR_CLOSE = 8; const COMA = 9; const INTERVAL = 10; - const F_DAY = 11; - const F_MONTH = 12; - const F_YEAR = 13; - const DOT = 14; - const VARNAME = 15; - const NAME = 16; - const NUMVAL = 17; - const STRVAL = 18; - const NOT_EQ = 19; - const LOG_AND = 20; - const LOG_OR = 21; - const MATH_DIV = 22; - const MATH_MULT = 23; - const MATH_PLUS = 24; - const MATH_MINUS = 25; - const GT = 26; - const LT = 27; - const GE = 28; - const LE = 29; - const LIKE = 30; - const NOT_LIKE = 31; - const IN = 32; - const NOT_IN = 33; - const F_IF = 34; - const F_ELT = 35; - const F_COALESCE = 36; - const F_CONCAT = 37; - const F_SUBSTR = 38; - const F_TRIM = 39; - const F_DATE = 40; - const F_DATE_FORMAT = 41; - const F_CURRENT_DATE = 42; - const F_NOW = 43; - const F_TIME = 44; - const F_TO_DAYS = 45; - const F_FROM_DAYS = 46; - const F_DATE_ADD = 47; - const F_DATE_SUB = 48; - const F_ROUND = 49; - const F_FLOOR = 50; - const YY_NO_ACTION = 209; - const YY_ACCEPT_ACTION = 208; - const YY_ERROR_ACTION = 207; + const F_SECOND = 11; + const F_MINUTE = 12; + const F_HOUR = 13; + const F_DAY = 14; + const F_MONTH = 15; + const F_YEAR = 16; + const DOT = 17; + const VARNAME = 18; + const NAME = 19; + const NUMVAL = 20; + const STRVAL = 21; + const NOT_EQ = 22; + const LOG_AND = 23; + const LOG_OR = 24; + const MATH_DIV = 25; + const MATH_MULT = 26; + const MATH_PLUS = 27; + const MATH_MINUS = 28; + const GT = 29; + const LT = 30; + const GE = 31; + const LE = 32; + const LIKE = 33; + const NOT_LIKE = 34; + const IN = 35; + const NOT_IN = 36; + const F_IF = 37; + const F_ELT = 38; + const F_COALESCE = 39; + const F_CONCAT = 40; + const F_SUBSTR = 41; + const F_TRIM = 42; + const F_DATE = 43; + const F_DATE_FORMAT = 44; + const F_CURRENT_DATE = 45; + const F_NOW = 46; + const F_TIME = 47; + const F_TO_DAYS = 48; + const F_FROM_DAYS = 49; + const F_DATE_ADD = 50; + const F_DATE_SUB = 51; + const F_ROUND = 52; + const F_FLOOR = 53; + const YY_NO_ACTION = 215; + const YY_ACCEPT_ACTION = 214; + const YY_ERROR_ACTION = 213; /* Next are that tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement @@ -215,161 +218,161 @@ class OQLParserRaw#line 102 "oql-parser.php" ** shifting non-terminals after a reduce. ** self::$yy_default Default action for each state. */ - const YY_SZ_ACTTAB = 429; + const YY_SZ_ACTTAB = 422; static public $yy_action = array( - /* 0 */ 4, 54, 8, 5, 96, 97, 98, 86, 95, 94, - /* 10 */ 76, 77, 80, 79, 53, 49, 51, 25, 45, 52, - /* 20 */ 55, 57, 46, 47, 50, 56, 70, 111, 110, 109, - /* 30 */ 108, 112, 113, 117, 116, 115, 114, 71, 106, 99, - /* 40 */ 100, 101, 105, 104, 26, 66, 66, 41, 67, 81, - /* 50 */ 4, 48, 43, 82, 96, 97, 98, 3, 95, 94, - /* 60 */ 76, 77, 38, 83, 11, 75, 74, 73, 72, 75, - /* 70 */ 74, 73, 72, 91, 63, 42, 22, 111, 110, 109, - /* 80 */ 108, 112, 113, 117, 116, 115, 114, 71, 106, 99, - /* 90 */ 100, 101, 105, 104, 4, 35, 6, 22, 96, 97, - /* 100 */ 98, 7, 95, 94, 76, 77, 65, 64, 60, 23, - /* 110 */ 6, 12, 13, 58, 41, 41, 91, 18, 61, 43, - /* 120 */ 69, 111, 110, 109, 108, 112, 113, 117, 116, 115, - /* 130 */ 114, 71, 106, 99, 100, 101, 105, 104, 208, 107, - /* 140 */ 87, 41, 42, 42, 39, 66, 88, 34, 27, 84, - /* 150 */ 89, 44, 93, 2, 36, 20, 22, 15, 92, 37, - /* 160 */ 76, 77, 102, 118, 9, 75, 74, 73, 72, 42, - /* 170 */ 94, 91, 66, 16, 24, 163, 21, 41, 103, 32, - /* 180 */ 1, 62, 88, 33, 27, 84, 89, 44, 40, 21, - /* 190 */ 31, 20, 78, 15, 90, 37, 10, 177, 177, 59, - /* 200 */ 177, 75, 74, 73, 72, 42, 41, 177, 177, 177, - /* 210 */ 177, 88, 33, 27, 84, 89, 44, 177, 177, 177, - /* 220 */ 20, 177, 15, 177, 37, 177, 177, 177, 68, 177, - /* 230 */ 75, 74, 73, 72, 42, 177, 177, 85, 41, 177, - /* 240 */ 177, 177, 177, 88, 34, 27, 84, 89, 44, 177, - /* 250 */ 177, 177, 20, 177, 15, 177, 37, 177, 177, 177, - /* 260 */ 177, 177, 75, 74, 73, 72, 42, 41, 177, 177, - /* 270 */ 177, 177, 88, 17, 27, 84, 89, 44, 177, 177, - /* 280 */ 177, 20, 177, 15, 177, 37, 177, 177, 177, 177, - /* 290 */ 177, 75, 74, 73, 72, 42, 177, 177, 177, 41, - /* 300 */ 177, 177, 177, 177, 88, 29, 27, 84, 89, 44, - /* 310 */ 177, 177, 177, 20, 177, 15, 177, 37, 177, 177, - /* 320 */ 177, 177, 177, 75, 74, 73, 72, 42, 41, 177, - /* 330 */ 177, 177, 177, 88, 177, 27, 84, 89, 44, 177, - /* 340 */ 177, 177, 20, 177, 15, 177, 30, 177, 177, 177, - /* 350 */ 177, 177, 75, 74, 73, 72, 42, 177, 177, 177, - /* 360 */ 41, 177, 177, 177, 177, 88, 177, 27, 84, 89, - /* 370 */ 44, 177, 177, 177, 20, 177, 14, 177, 177, 177, - /* 380 */ 177, 177, 177, 177, 75, 74, 73, 72, 42, 41, - /* 390 */ 177, 177, 177, 177, 88, 177, 27, 84, 89, 44, - /* 400 */ 41, 177, 177, 19, 177, 88, 177, 28, 84, 89, - /* 410 */ 44, 177, 177, 75, 74, 73, 72, 42, 177, 177, - /* 420 */ 177, 177, 177, 177, 75, 74, 73, 72, 42, + /* 0 */ 4, 50, 84, 5, 33, 10, 25, 99, 100, 101, + /* 10 */ 70, 98, 97, 79, 80, 38, 7, 55, 78, 77, + /* 20 */ 76, 75, 57, 56, 58, 47, 48, 49, 46, 54, + /* 30 */ 114, 113, 112, 111, 115, 116, 120, 119, 118, 117, + /* 40 */ 110, 109, 74, 103, 104, 108, 107, 24, 6, 43, + /* 50 */ 43, 71, 85, 4, 91, 69, 29, 87, 92, 42, + /* 60 */ 99, 100, 101, 19, 98, 97, 79, 80, 78, 77, + /* 70 */ 76, 75, 93, 78, 77, 76, 75, 45, 45, 96, + /* 80 */ 2, 68, 18, 114, 113, 112, 111, 115, 116, 120, + /* 90 */ 119, 118, 117, 110, 109, 74, 103, 104, 108, 107, + /* 100 */ 4, 43, 8, 86, 11, 62, 41, 99, 100, 101, + /* 110 */ 73, 98, 97, 79, 80, 52, 51, 21, 13, 64, + /* 120 */ 12, 25, 89, 43, 40, 44, 3, 53, 41, 45, + /* 130 */ 114, 113, 112, 111, 115, 116, 120, 119, 118, 117, + /* 140 */ 110, 109, 74, 103, 104, 108, 107, 214, 102, 90, + /* 150 */ 43, 45, 73, 73, 95, 91, 37, 29, 87, 92, + /* 160 */ 42, 83, 82, 23, 20, 26, 15, 22, 31, 35, + /* 170 */ 94, 25, 9, 169, 78, 77, 76, 75, 45, 30, + /* 180 */ 72, 67, 66, 61, 60, 63, 106, 79, 80, 43, + /* 190 */ 1, 73, 6, 94, 91, 32, 29, 87, 92, 42, + /* 200 */ 39, 105, 121, 20, 16, 15, 94, 31, 81, 22, + /* 210 */ 97, 65, 36, 78, 77, 76, 75, 45, 43, 183, + /* 220 */ 183, 183, 183, 91, 32, 29, 87, 92, 42, 183, + /* 230 */ 183, 183, 20, 183, 15, 183, 31, 183, 183, 183, + /* 240 */ 59, 183, 78, 77, 76, 75, 45, 88, 43, 183, + /* 250 */ 183, 183, 183, 91, 37, 29, 87, 92, 42, 183, + /* 260 */ 183, 183, 20, 183, 15, 183, 31, 183, 183, 183, + /* 270 */ 183, 183, 78, 77, 76, 75, 45, 43, 183, 183, + /* 280 */ 183, 183, 91, 17, 29, 87, 92, 42, 183, 183, + /* 290 */ 183, 20, 183, 15, 183, 31, 183, 183, 183, 183, + /* 300 */ 183, 78, 77, 76, 75, 45, 43, 183, 183, 183, + /* 310 */ 183, 91, 28, 29, 87, 92, 42, 183, 183, 183, + /* 320 */ 20, 183, 15, 183, 31, 183, 183, 183, 183, 183, + /* 330 */ 78, 77, 76, 75, 45, 43, 183, 183, 183, 183, + /* 340 */ 91, 183, 29, 87, 92, 42, 183, 183, 183, 20, + /* 350 */ 183, 15, 183, 34, 183, 183, 183, 183, 183, 78, + /* 360 */ 77, 76, 75, 45, 43, 183, 183, 183, 183, 91, + /* 370 */ 183, 29, 87, 92, 42, 183, 183, 183, 20, 183, + /* 380 */ 14, 183, 183, 183, 183, 183, 183, 183, 78, 77, + /* 390 */ 76, 75, 45, 43, 183, 183, 183, 183, 91, 183, + /* 400 */ 27, 87, 92, 42, 183, 183, 183, 183, 183, 183, + /* 410 */ 183, 183, 183, 183, 183, 183, 183, 78, 77, 76, + /* 420 */ 75, 45, ); static public $yy_lookahead = array( - /* 0 */ 7, 6, 72, 10, 11, 12, 13, 57, 15, 16, - /* 10 */ 17, 18, 32, 33, 19, 85, 86, 55, 55, 24, - /* 20 */ 25, 26, 27, 28, 29, 30, 31, 34, 35, 36, + /* 0 */ 7, 6, 66, 10, 59, 7, 61, 14, 15, 16, + /* 10 */ 60, 18, 19, 20, 21, 79, 77, 22, 82, 83, + /* 20 */ 84, 85, 27, 28, 29, 30, 31, 32, 33, 34, /* 30 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - /* 40 */ 47, 48, 49, 50, 1, 83, 83, 55, 20, 63, - /* 50 */ 7, 59, 60, 63, 11, 12, 13, 3, 15, 16, - /* 60 */ 17, 18, 76, 8, 9, 79, 80, 81, 82, 79, - /* 70 */ 80, 81, 82, 21, 56, 83, 58, 34, 35, 36, - /* 80 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - /* 90 */ 47, 48, 49, 50, 7, 56, 75, 58, 11, 12, - /* 100 */ 13, 74, 15, 16, 17, 18, 11, 12, 13, 2, - /* 110 */ 75, 5, 5, 78, 55, 55, 21, 55, 59, 60, - /* 120 */ 60, 34, 35, 36, 37, 38, 39, 40, 41, 42, - /* 130 */ 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, - /* 140 */ 54, 55, 83, 83, 55, 83, 60, 61, 62, 63, - /* 150 */ 64, 65, 8, 9, 56, 69, 58, 71, 8, 73, - /* 160 */ 17, 18, 22, 23, 70, 79, 80, 81, 82, 83, - /* 170 */ 16, 21, 83, 6, 2, 14, 4, 55, 84, 14, - /* 180 */ 7, 57, 60, 61, 62, 63, 64, 65, 66, 4, - /* 190 */ 67, 69, 83, 71, 68, 73, 7, 87, 87, 77, - /* 200 */ 87, 79, 80, 81, 82, 83, 55, 87, 87, 87, - /* 210 */ 87, 60, 61, 62, 63, 64, 65, 87, 87, 87, - /* 220 */ 69, 87, 71, 87, 73, 87, 87, 87, 77, 87, - /* 230 */ 79, 80, 81, 82, 83, 87, 87, 54, 55, 87, - /* 240 */ 87, 87, 87, 60, 61, 62, 63, 64, 65, 87, - /* 250 */ 87, 87, 69, 87, 71, 87, 73, 87, 87, 87, - /* 260 */ 87, 87, 79, 80, 81, 82, 83, 55, 87, 87, - /* 270 */ 87, 87, 60, 61, 62, 63, 64, 65, 87, 87, - /* 280 */ 87, 69, 87, 71, 87, 73, 87, 87, 87, 87, - /* 290 */ 87, 79, 80, 81, 82, 83, 87, 87, 87, 55, - /* 300 */ 87, 87, 87, 87, 60, 61, 62, 63, 64, 65, - /* 310 */ 87, 87, 87, 69, 87, 71, 87, 73, 87, 87, - /* 320 */ 87, 87, 87, 79, 80, 81, 82, 83, 55, 87, - /* 330 */ 87, 87, 87, 60, 87, 62, 63, 64, 65, 87, - /* 340 */ 87, 87, 69, 87, 71, 87, 73, 87, 87, 87, - /* 350 */ 87, 87, 79, 80, 81, 82, 83, 87, 87, 87, - /* 360 */ 55, 87, 87, 87, 87, 60, 87, 62, 63, 64, - /* 370 */ 65, 87, 87, 87, 69, 87, 71, 87, 87, 87, - /* 380 */ 87, 87, 87, 87, 79, 80, 81, 82, 83, 55, - /* 390 */ 87, 87, 87, 87, 60, 87, 62, 63, 64, 65, - /* 400 */ 55, 87, 87, 69, 87, 60, 87, 62, 63, 64, - /* 410 */ 65, 87, 87, 79, 80, 81, 82, 83, 87, 87, - /* 420 */ 87, 87, 87, 87, 79, 80, 81, 82, 83, + /* 40 */ 47, 48, 49, 50, 51, 52, 53, 1, 78, 58, + /* 50 */ 58, 81, 66, 7, 63, 63, 65, 66, 67, 68, + /* 60 */ 14, 15, 16, 72, 18, 19, 20, 21, 82, 83, + /* 70 */ 84, 85, 71, 82, 83, 84, 85, 86, 86, 8, + /* 80 */ 9, 23, 58, 37, 38, 39, 40, 41, 42, 43, + /* 90 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + /* 100 */ 7, 58, 75, 8, 9, 62, 63, 14, 15, 16, + /* 110 */ 86, 18, 19, 20, 21, 88, 89, 2, 5, 59, + /* 120 */ 5, 61, 60, 58, 58, 58, 3, 62, 63, 86, + /* 130 */ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + /* 140 */ 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, + /* 150 */ 58, 86, 86, 86, 8, 63, 64, 65, 66, 67, + /* 160 */ 68, 35, 36, 58, 72, 2, 74, 4, 76, 59, + /* 170 */ 24, 61, 73, 17, 82, 83, 84, 85, 86, 17, + /* 180 */ 11, 12, 13, 14, 15, 16, 87, 20, 21, 58, + /* 190 */ 7, 86, 78, 24, 63, 64, 65, 66, 67, 68, + /* 200 */ 69, 25, 26, 72, 6, 74, 24, 76, 86, 4, + /* 210 */ 19, 80, 70, 82, 83, 84, 85, 86, 58, 90, + /* 220 */ 90, 90, 90, 63, 64, 65, 66, 67, 68, 90, + /* 230 */ 90, 90, 72, 90, 74, 90, 76, 90, 90, 90, + /* 240 */ 80, 90, 82, 83, 84, 85, 86, 57, 58, 90, + /* 250 */ 90, 90, 90, 63, 64, 65, 66, 67, 68, 90, + /* 260 */ 90, 90, 72, 90, 74, 90, 76, 90, 90, 90, + /* 270 */ 90, 90, 82, 83, 84, 85, 86, 58, 90, 90, + /* 280 */ 90, 90, 63, 64, 65, 66, 67, 68, 90, 90, + /* 290 */ 90, 72, 90, 74, 90, 76, 90, 90, 90, 90, + /* 300 */ 90, 82, 83, 84, 85, 86, 58, 90, 90, 90, + /* 310 */ 90, 63, 64, 65, 66, 67, 68, 90, 90, 90, + /* 320 */ 72, 90, 74, 90, 76, 90, 90, 90, 90, 90, + /* 330 */ 82, 83, 84, 85, 86, 58, 90, 90, 90, 90, + /* 340 */ 63, 90, 65, 66, 67, 68, 90, 90, 90, 72, + /* 350 */ 90, 74, 90, 76, 90, 90, 90, 90, 90, 82, + /* 360 */ 83, 84, 85, 86, 58, 90, 90, 90, 90, 63, + /* 370 */ 90, 65, 66, 67, 68, 90, 90, 90, 72, 90, + /* 380 */ 74, 90, 90, 90, 90, 90, 90, 90, 82, 83, + /* 390 */ 84, 85, 86, 58, 90, 90, 90, 90, 63, 90, + /* 400 */ 65, 66, 67, 68, 90, 90, 90, 90, 90, 90, + /* 410 */ 90, 90, 90, 90, 90, 90, 90, 82, 83, 84, + /* 420 */ 85, 86, ); - const YY_SHIFT_USE_DFLT = -21; + const YY_SHIFT_USE_DFLT = -8; const YY_SHIFT_MAX = 45; static public $yy_shift_ofst = array( - /* 0 */ 43, -7, -7, 87, 87, 87, 87, 87, 87, 87, - /* 10 */ 143, 143, 154, 154, -5, -5, 154, 95, 172, 140, - /* 20 */ 140, 154, 185, 154, 154, 185, 154, -20, -20, 150, - /* 30 */ 28, 189, 154, 52, 52, 54, 54, 28, 55, 107, - /* 40 */ 144, 165, 161, 167, 173, 106, + /* 0 */ 46, -7, -7, 93, 93, 93, 93, 93, 93, 93, + /* 10 */ 167, 167, 191, 191, -5, -5, 191, 169, 163, 176, + /* 20 */ 176, 191, 191, 205, 191, 205, 191, 126, 146, 126, + /* 30 */ 191, 58, 182, 123, 58, 123, -2, 182, 95, 71, + /* 40 */ 115, 198, 183, 162, 113, 156, ); - const YY_REDUCE_USE_DFLT = -71; + const YY_REDUCE_USE_DFLT = -65; const YY_REDUCE_MAX = 37; static public $yy_reduce_ofst = array( - /* 0 */ 86, 122, 151, 183, 244, 212, 273, 305, 334, 345, - /* 10 */ -14, -10, 59, -8, -70, -70, 60, 35, 98, 94, - /* 20 */ 94, 89, 18, -37, -38, 39, 62, 123, 123, 21, - /* 30 */ 27, 126, 109, 21, 21, 124, -50, 27, + /* 0 */ 92, 131, 160, 190, 248, 219, 277, 306, -9, 335, + /* 10 */ -64, -14, 65, 43, 27, 27, -8, -30, 110, 99, + /* 20 */ 99, 67, 66, -55, 24, 60, 105, 142, 114, 142, + /* 30 */ 122, -61, 114, -50, -61, 62, 1, 114, ); static public $yyExpectedTokens = array( - /* 0 */ array(1, 7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 1 */ array(7, 10, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 2 */ array(7, 10, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 3 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 4 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 5 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 6 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 7 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 8 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 9 */ array(7, 11, 12, 13, 15, 16, 17, 18, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, ), - /* 10 */ array(17, 18, ), - /* 11 */ array(17, 18, ), - /* 12 */ array(16, ), - /* 13 */ array(16, ), - /* 14 */ array(6, 19, 24, 25, 26, 27, 28, 29, 30, 31, ), - /* 15 */ array(6, 19, 24, 25, 26, 27, 28, 29, 30, 31, ), - /* 16 */ array(16, ), - /* 17 */ array(11, 12, 13, 21, ), + /* 0 */ array(1, 7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 1 */ array(7, 10, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 2 */ array(7, 10, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 3 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 4 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 5 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 6 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 7 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 8 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 9 */ array(7, 14, 15, 16, 18, 19, 20, 21, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ), + /* 10 */ array(20, 21, ), + /* 11 */ array(20, 21, ), + /* 12 */ array(19, ), + /* 13 */ array(19, ), + /* 14 */ array(6, 22, 27, 28, 29, 30, 31, 32, 33, 34, ), + /* 15 */ array(6, 22, 27, 28, 29, 30, 31, 32, 33, 34, ), + /* 16 */ array(19, ), + /* 17 */ array(11, 12, 13, 14, 15, 16, 24, ), /* 18 */ array(2, 4, ), - /* 19 */ array(22, 23, ), - /* 20 */ array(22, 23, ), - /* 21 */ array(16, ), - /* 22 */ array(4, ), - /* 23 */ array(16, ), - /* 24 */ array(16, ), + /* 19 */ array(25, 26, ), + /* 20 */ array(25, 26, ), + /* 21 */ array(19, ), + /* 22 */ array(19, ), + /* 23 */ array(4, ), + /* 24 */ array(19, ), /* 25 */ array(4, ), - /* 26 */ array(16, ), - /* 27 */ array(32, 33, ), - /* 28 */ array(32, 33, ), - /* 29 */ array(8, 21, ), - /* 30 */ array(20, ), - /* 31 */ array(7, ), - /* 32 */ array(16, ), - /* 33 */ array(21, ), - /* 34 */ array(21, ), + /* 26 */ array(19, ), + /* 27 */ array(35, 36, ), + /* 28 */ array(8, 24, ), + /* 29 */ array(35, 36, ), + /* 30 */ array(19, ), + /* 31 */ array(23, ), + /* 32 */ array(24, ), + /* 33 */ array(3, ), + /* 34 */ array(23, ), /* 35 */ array(3, ), - /* 36 */ array(3, ), - /* 37 */ array(20, ), + /* 36 */ array(7, ), + /* 37 */ array(24, ), /* 38 */ array(8, 9, ), - /* 39 */ array(2, 5, ), - /* 40 */ array(8, 9, ), - /* 41 */ array(14, ), - /* 42 */ array(14, ), - /* 43 */ array(6, ), - /* 44 */ array(7, ), - /* 45 */ array(5, ), + /* 39 */ array(8, 9, ), + /* 40 */ array(2, 5, ), + /* 41 */ array(6, ), + /* 42 */ array(7, ), + /* 43 */ array(17, ), + /* 44 */ array(5, ), + /* 45 */ array(17, ), /* 46 */ array(), /* 47 */ array(), /* 48 */ array(), @@ -443,20 +446,24 @@ static public $yy_action = array( /* 116 */ array(), /* 117 */ array(), /* 118 */ array(), + /* 119 */ array(), + /* 120 */ array(), + /* 121 */ array(), ); static public $yy_default = array( - /* 0 */ 207, 149, 207, 207, 207, 207, 207, 207, 207, 207, - /* 10 */ 207, 207, 207, 207, 143, 142, 207, 207, 127, 141, - /* 20 */ 140, 207, 126, 207, 207, 127, 207, 138, 139, 207, - /* 30 */ 145, 207, 207, 152, 131, 124, 124, 144, 207, 207, - /* 40 */ 207, 207, 161, 207, 207, 207, 180, 181, 129, 169, - /* 50 */ 182, 170, 177, 172, 171, 178, 183, 179, 153, 150, - /* 60 */ 156, 128, 122, 125, 155, 154, 163, 173, 151, 130, - /* 70 */ 184, 197, 160, 159, 158, 157, 166, 167, 162, 186, - /* 80 */ 185, 147, 148, 146, 132, 123, 121, 120, 133, 134, - /* 90 */ 137, 174, 136, 135, 165, 164, 202, 201, 200, 199, - /* 100 */ 203, 204, 175, 168, 206, 205, 198, 119, 190, 189, - /* 110 */ 188, 187, 191, 192, 196, 195, 194, 193, 176, + /* 0 */ 213, 152, 213, 213, 213, 213, 213, 213, 213, 213, + /* 10 */ 213, 213, 213, 213, 146, 145, 213, 213, 130, 144, + /* 20 */ 143, 213, 213, 130, 213, 129, 213, 142, 213, 141, + /* 30 */ 213, 147, 155, 127, 148, 127, 213, 134, 213, 213, + /* 40 */ 213, 213, 213, 213, 213, 167, 189, 186, 187, 188, + /* 50 */ 177, 176, 175, 132, 190, 178, 184, 183, 185, 154, + /* 60 */ 161, 160, 131, 162, 128, 153, 159, 158, 179, 133, + /* 70 */ 125, 156, 157, 169, 205, 166, 165, 164, 163, 172, + /* 80 */ 173, 168, 192, 191, 150, 151, 149, 135, 126, 124, + /* 90 */ 123, 136, 137, 140, 180, 139, 138, 171, 170, 208, + /* 100 */ 207, 206, 122, 209, 210, 181, 174, 212, 211, 204, + /* 110 */ 203, 196, 195, 194, 193, 197, 198, 202, 201, 200, + /* 120 */ 199, 182, ); /* The next thing included is series of defines which control ** various aspects of the generated parser. @@ -473,11 +480,11 @@ static public $yy_action = array( ** self::YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. */ - const YYNOCODE = 88; + const YYNOCODE = 91; const YYSTACKDEPTH = 100; - const YYNSTATE = 119; - const YYNRULE = 88; - const YYERRORSYMBOL = 51; + const YYNSTATE = 122; + const YYNRULE = 91; + const YYERRORSYMBOL = 54; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; /** The next table maps tokens into fallback tokens. If a construct @@ -561,26 +568,27 @@ static public $yy_action = array( static public $yyTokenName = array( '$', 'SELECT', 'AS_ALIAS', 'WHERE', 'JOIN', 'ON', 'EQ', 'PAR_OPEN', - 'PAR_CLOSE', 'COMA', 'INTERVAL', 'F_DAY', - 'F_MONTH', 'F_YEAR', 'DOT', 'VARNAME', - 'NAME', 'NUMVAL', 'STRVAL', 'NOT_EQ', - 'LOG_AND', 'LOG_OR', 'MATH_DIV', 'MATH_MULT', - 'MATH_PLUS', 'MATH_MINUS', 'GT', 'LT', - 'GE', 'LE', 'LIKE', 'NOT_LIKE', - 'IN', 'NOT_IN', 'F_IF', 'F_ELT', - 'F_COALESCE', 'F_CONCAT', 'F_SUBSTR', 'F_TRIM', - 'F_DATE', 'F_DATE_FORMAT', 'F_CURRENT_DATE', 'F_NOW', - 'F_TIME', 'F_TO_DAYS', 'F_FROM_DAYS', 'F_DATE_ADD', - 'F_DATE_SUB', 'F_ROUND', 'F_FLOOR', 'error', - 'result', 'query', 'condition', 'class_name', - 'join_statement', 'where_statement', 'join_item', 'join_condition', - 'field_id', 'expression_prio4', 'expression_basic', 'scalar', - 'var_name', 'func_name', 'arg_list', 'list_operator', - 'list', 'expression_prio1', 'operator1', 'expression_prio2', - 'operator2', 'expression_prio3', 'operator3', 'operator4', - 'scalar_list', 'argument', 'interval_unit', 'num_scalar', - 'str_scalar', 'num_value', 'str_value', 'name', - 'num_operator1', 'num_operator2', 'str_operator', + 'PAR_CLOSE', 'COMA', 'INTERVAL', 'F_SECOND', + 'F_MINUTE', 'F_HOUR', 'F_DAY', 'F_MONTH', + 'F_YEAR', 'DOT', 'VARNAME', 'NAME', + 'NUMVAL', 'STRVAL', 'NOT_EQ', 'LOG_AND', + 'LOG_OR', 'MATH_DIV', 'MATH_MULT', 'MATH_PLUS', + 'MATH_MINUS', 'GT', 'LT', 'GE', + 'LE', 'LIKE', 'NOT_LIKE', 'IN', + 'NOT_IN', 'F_IF', 'F_ELT', 'F_COALESCE', + 'F_CONCAT', 'F_SUBSTR', 'F_TRIM', 'F_DATE', + 'F_DATE_FORMAT', 'F_CURRENT_DATE', 'F_NOW', 'F_TIME', + 'F_TO_DAYS', 'F_FROM_DAYS', 'F_DATE_ADD', 'F_DATE_SUB', + 'F_ROUND', 'F_FLOOR', 'error', 'result', + 'query', 'condition', 'class_name', 'join_statement', + 'where_statement', 'join_item', 'join_condition', 'field_id', + 'expression_prio4', 'expression_basic', 'scalar', 'var_name', + 'func_name', 'arg_list', 'list_operator', 'list', + 'expression_prio1', 'operator1', 'expression_prio2', 'operator2', + 'expression_prio3', 'operator3', 'operator4', 'scalar_list', + 'argument', 'interval_unit', 'num_scalar', 'str_scalar', + 'num_value', 'str_value', 'name', 'num_operator1', + 'num_operator2', 'str_operator', ); /** @@ -623,59 +631,62 @@ static public $yy_action = array( /* 32 */ "arg_list ::= arg_list COMA argument", /* 33 */ "argument ::= expression_prio4", /* 34 */ "argument ::= INTERVAL expression_prio4 interval_unit", - /* 35 */ "interval_unit ::= F_DAY", - /* 36 */ "interval_unit ::= F_MONTH", - /* 37 */ "interval_unit ::= F_YEAR", - /* 38 */ "scalar ::= num_scalar", - /* 39 */ "scalar ::= str_scalar", - /* 40 */ "num_scalar ::= num_value", - /* 41 */ "str_scalar ::= str_value", - /* 42 */ "field_id ::= name", - /* 43 */ "field_id ::= class_name DOT name", - /* 44 */ "class_name ::= name", - /* 45 */ "var_name ::= VARNAME", - /* 46 */ "name ::= NAME", - /* 47 */ "num_value ::= NUMVAL", - /* 48 */ "str_value ::= STRVAL", - /* 49 */ "operator1 ::= num_operator1", - /* 50 */ "operator2 ::= num_operator2", - /* 51 */ "operator2 ::= str_operator", - /* 52 */ "operator2 ::= EQ", - /* 53 */ "operator2 ::= NOT_EQ", - /* 54 */ "operator3 ::= LOG_AND", - /* 55 */ "operator4 ::= LOG_OR", - /* 56 */ "num_operator1 ::= MATH_DIV", - /* 57 */ "num_operator1 ::= MATH_MULT", - /* 58 */ "num_operator2 ::= MATH_PLUS", - /* 59 */ "num_operator2 ::= MATH_MINUS", - /* 60 */ "num_operator2 ::= GT", - /* 61 */ "num_operator2 ::= LT", - /* 62 */ "num_operator2 ::= GE", - /* 63 */ "num_operator2 ::= LE", - /* 64 */ "str_operator ::= LIKE", - /* 65 */ "str_operator ::= NOT_LIKE", - /* 66 */ "list_operator ::= IN", - /* 67 */ "list_operator ::= NOT_IN", - /* 68 */ "func_name ::= F_IF", - /* 69 */ "func_name ::= F_ELT", - /* 70 */ "func_name ::= F_COALESCE", - /* 71 */ "func_name ::= F_CONCAT", - /* 72 */ "func_name ::= F_SUBSTR", - /* 73 */ "func_name ::= F_TRIM", - /* 74 */ "func_name ::= F_DATE", - /* 75 */ "func_name ::= F_DATE_FORMAT", - /* 76 */ "func_name ::= F_CURRENT_DATE", - /* 77 */ "func_name ::= F_NOW", - /* 78 */ "func_name ::= F_TIME", - /* 79 */ "func_name ::= F_TO_DAYS", - /* 80 */ "func_name ::= F_FROM_DAYS", - /* 81 */ "func_name ::= F_YEAR", - /* 82 */ "func_name ::= F_MONTH", - /* 83 */ "func_name ::= F_DAY", - /* 84 */ "func_name ::= F_DATE_ADD", - /* 85 */ "func_name ::= F_DATE_SUB", - /* 86 */ "func_name ::= F_ROUND", - /* 87 */ "func_name ::= F_FLOOR", + /* 35 */ "interval_unit ::= F_SECOND", + /* 36 */ "interval_unit ::= F_MINUTE", + /* 37 */ "interval_unit ::= F_HOUR", + /* 38 */ "interval_unit ::= F_DAY", + /* 39 */ "interval_unit ::= F_MONTH", + /* 40 */ "interval_unit ::= F_YEAR", + /* 41 */ "scalar ::= num_scalar", + /* 42 */ "scalar ::= str_scalar", + /* 43 */ "num_scalar ::= num_value", + /* 44 */ "str_scalar ::= str_value", + /* 45 */ "field_id ::= name", + /* 46 */ "field_id ::= class_name DOT name", + /* 47 */ "class_name ::= name", + /* 48 */ "var_name ::= VARNAME", + /* 49 */ "name ::= NAME", + /* 50 */ "num_value ::= NUMVAL", + /* 51 */ "str_value ::= STRVAL", + /* 52 */ "operator1 ::= num_operator1", + /* 53 */ "operator2 ::= num_operator2", + /* 54 */ "operator2 ::= str_operator", + /* 55 */ "operator2 ::= EQ", + /* 56 */ "operator2 ::= NOT_EQ", + /* 57 */ "operator3 ::= LOG_AND", + /* 58 */ "operator4 ::= LOG_OR", + /* 59 */ "num_operator1 ::= MATH_DIV", + /* 60 */ "num_operator1 ::= MATH_MULT", + /* 61 */ "num_operator2 ::= MATH_PLUS", + /* 62 */ "num_operator2 ::= MATH_MINUS", + /* 63 */ "num_operator2 ::= GT", + /* 64 */ "num_operator2 ::= LT", + /* 65 */ "num_operator2 ::= GE", + /* 66 */ "num_operator2 ::= LE", + /* 67 */ "str_operator ::= LIKE", + /* 68 */ "str_operator ::= NOT_LIKE", + /* 69 */ "list_operator ::= IN", + /* 70 */ "list_operator ::= NOT_IN", + /* 71 */ "func_name ::= F_IF", + /* 72 */ "func_name ::= F_ELT", + /* 73 */ "func_name ::= F_COALESCE", + /* 74 */ "func_name ::= F_CONCAT", + /* 75 */ "func_name ::= F_SUBSTR", + /* 76 */ "func_name ::= F_TRIM", + /* 77 */ "func_name ::= F_DATE", + /* 78 */ "func_name ::= F_DATE_FORMAT", + /* 79 */ "func_name ::= F_CURRENT_DATE", + /* 80 */ "func_name ::= F_NOW", + /* 81 */ "func_name ::= F_TIME", + /* 82 */ "func_name ::= F_TO_DAYS", + /* 83 */ "func_name ::= F_FROM_DAYS", + /* 84 */ "func_name ::= F_YEAR", + /* 85 */ "func_name ::= F_MONTH", + /* 86 */ "func_name ::= F_DAY", + /* 87 */ "func_name ::= F_DATE_ADD", + /* 88 */ "func_name ::= F_DATE_SUB", + /* 89 */ "func_name ::= F_ROUND", + /* 90 */ "func_name ::= F_FLOOR", ); /** @@ -1040,94 +1051,97 @@ static public $yy_action = array( * */ static public $yyRuleInfo = array( - array( 'lhs' => 52, 'rhs' => 1 ), - array( 'lhs' => 52, 'rhs' => 1 ), - array( 'lhs' => 53, 'rhs' => 4 ), - array( 'lhs' => 53, 'rhs' => 6 ), - array( 'lhs' => 57, 'rhs' => 2 ), - array( 'lhs' => 57, 'rhs' => 0 ), - array( 'lhs' => 56, 'rhs' => 2 ), - array( 'lhs' => 56, 'rhs' => 1 ), - array( 'lhs' => 56, 'rhs' => 0 ), - array( 'lhs' => 58, 'rhs' => 6 ), - array( 'lhs' => 58, 'rhs' => 4 ), - array( 'lhs' => 59, 'rhs' => 3 ), - array( 'lhs' => 54, 'rhs' => 1 ), - array( 'lhs' => 62, 'rhs' => 1 ), - array( 'lhs' => 62, 'rhs' => 1 ), - array( 'lhs' => 62, 'rhs' => 1 ), - array( 'lhs' => 62, 'rhs' => 4 ), + array( 'lhs' => 55, 'rhs' => 1 ), + array( 'lhs' => 55, 'rhs' => 1 ), + array( 'lhs' => 56, 'rhs' => 4 ), + array( 'lhs' => 56, 'rhs' => 6 ), + array( 'lhs' => 60, 'rhs' => 2 ), + array( 'lhs' => 60, 'rhs' => 0 ), + array( 'lhs' => 59, 'rhs' => 2 ), + array( 'lhs' => 59, 'rhs' => 1 ), + array( 'lhs' => 59, 'rhs' => 0 ), + array( 'lhs' => 61, 'rhs' => 6 ), + array( 'lhs' => 61, 'rhs' => 4 ), array( 'lhs' => 62, 'rhs' => 3 ), - array( 'lhs' => 62, 'rhs' => 3 ), - array( 'lhs' => 69, 'rhs' => 1 ), - array( 'lhs' => 69, 'rhs' => 3 ), - array( 'lhs' => 71, 'rhs' => 1 ), - array( 'lhs' => 71, 'rhs' => 3 ), - array( 'lhs' => 73, 'rhs' => 1 ), - array( 'lhs' => 73, 'rhs' => 3 ), - array( 'lhs' => 61, 'rhs' => 1 ), - array( 'lhs' => 61, 'rhs' => 3 ), - array( 'lhs' => 68, 'rhs' => 3 ), + array( 'lhs' => 57, 'rhs' => 1 ), + array( 'lhs' => 65, 'rhs' => 1 ), + array( 'lhs' => 65, 'rhs' => 1 ), + array( 'lhs' => 65, 'rhs' => 1 ), + array( 'lhs' => 65, 'rhs' => 4 ), + array( 'lhs' => 65, 'rhs' => 3 ), + array( 'lhs' => 65, 'rhs' => 3 ), + array( 'lhs' => 72, 'rhs' => 1 ), + array( 'lhs' => 72, 'rhs' => 3 ), + array( 'lhs' => 74, 'rhs' => 1 ), + array( 'lhs' => 74, 'rhs' => 3 ), array( 'lhs' => 76, 'rhs' => 1 ), array( 'lhs' => 76, 'rhs' => 3 ), - array( 'lhs' => 66, 'rhs' => 0 ), - array( 'lhs' => 66, 'rhs' => 1 ), - array( 'lhs' => 66, 'rhs' => 3 ), - array( 'lhs' => 77, 'rhs' => 1 ), - array( 'lhs' => 77, 'rhs' => 3 ), - array( 'lhs' => 78, 'rhs' => 1 ), - array( 'lhs' => 78, 'rhs' => 1 ), - array( 'lhs' => 78, 'rhs' => 1 ), - array( 'lhs' => 63, 'rhs' => 1 ), - array( 'lhs' => 63, 'rhs' => 1 ), - array( 'lhs' => 79, 'rhs' => 1 ), - array( 'lhs' => 80, 'rhs' => 1 ), - array( 'lhs' => 60, 'rhs' => 1 ), - array( 'lhs' => 60, 'rhs' => 3 ), - array( 'lhs' => 55, 'rhs' => 1 ), array( 'lhs' => 64, 'rhs' => 1 ), - array( 'lhs' => 83, 'rhs' => 1 ), + array( 'lhs' => 64, 'rhs' => 3 ), + array( 'lhs' => 71, 'rhs' => 3 ), + array( 'lhs' => 79, 'rhs' => 1 ), + array( 'lhs' => 79, 'rhs' => 3 ), + array( 'lhs' => 69, 'rhs' => 0 ), + array( 'lhs' => 69, 'rhs' => 1 ), + array( 'lhs' => 69, 'rhs' => 3 ), + array( 'lhs' => 80, 'rhs' => 1 ), + array( 'lhs' => 80, 'rhs' => 3 ), array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 81, 'rhs' => 1 ), + array( 'lhs' => 66, 'rhs' => 1 ), + array( 'lhs' => 66, 'rhs' => 1 ), array( 'lhs' => 82, 'rhs' => 1 ), - array( 'lhs' => 70, 'rhs' => 1 ), - array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 72, 'rhs' => 1 ), - array( 'lhs' => 74, 'rhs' => 1 ), + array( 'lhs' => 83, 'rhs' => 1 ), + array( 'lhs' => 63, 'rhs' => 1 ), + array( 'lhs' => 63, 'rhs' => 3 ), + array( 'lhs' => 58, 'rhs' => 1 ), + array( 'lhs' => 67, 'rhs' => 1 ), + array( 'lhs' => 86, 'rhs' => 1 ), + array( 'lhs' => 84, 'rhs' => 1 ), + array( 'lhs' => 85, 'rhs' => 1 ), + array( 'lhs' => 73, 'rhs' => 1 ), array( 'lhs' => 75, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 84, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 85, 'rhs' => 1 ), - array( 'lhs' => 86, 'rhs' => 1 ), - array( 'lhs' => 86, 'rhs' => 1 ), - array( 'lhs' => 67, 'rhs' => 1 ), - array( 'lhs' => 67, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), - array( 'lhs' => 65, 'rhs' => 1 ), + array( 'lhs' => 75, 'rhs' => 1 ), + array( 'lhs' => 75, 'rhs' => 1 ), + array( 'lhs' => 75, 'rhs' => 1 ), + array( 'lhs' => 77, 'rhs' => 1 ), + array( 'lhs' => 78, 'rhs' => 1 ), + array( 'lhs' => 87, 'rhs' => 1 ), + array( 'lhs' => 87, 'rhs' => 1 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 88, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 89, 'rhs' => 1 ), + array( 'lhs' => 70, 'rhs' => 1 ), + array( 'lhs' => 70, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), + array( 'lhs' => 68, 'rhs' => 1 ), ); /** @@ -1163,6 +1177,9 @@ static public $yy_action = array( 37 => 12, 38 => 12, 39 => 12, + 40 => 12, + 41 => 12, + 42 => 12, 16 => 16, 17 => 17, 18 => 18, @@ -1177,54 +1194,54 @@ static public $yy_action = array( 32 => 29, 30 => 30, 34 => 34, - 40 => 40, - 41 => 40, - 42 => 42, 43 => 43, - 44 => 44, - 68 => 44, - 69 => 44, - 70 => 44, - 71 => 44, - 72 => 44, - 73 => 44, - 74 => 44, - 75 => 44, - 76 => 44, - 77 => 44, - 78 => 44, - 79 => 44, - 80 => 44, - 81 => 44, - 82 => 44, - 83 => 44, - 84 => 44, - 85 => 44, - 86 => 44, - 87 => 44, + 44 => 43, 45 => 45, 46 => 46, 47 => 47, - 49 => 47, - 50 => 47, - 51 => 47, - 52 => 47, - 53 => 47, - 54 => 47, - 55 => 47, - 56 => 47, - 57 => 47, - 58 => 47, - 59 => 47, - 60 => 47, - 61 => 47, - 62 => 47, - 63 => 47, - 64 => 47, - 65 => 47, - 66 => 47, - 67 => 47, + 71 => 47, + 72 => 47, + 73 => 47, + 74 => 47, + 75 => 47, + 76 => 47, + 77 => 47, + 78 => 47, + 79 => 47, + 80 => 47, + 81 => 47, + 82 => 47, + 83 => 47, + 84 => 47, + 85 => 47, + 86 => 47, + 87 => 47, + 88 => 47, + 89 => 47, + 90 => 47, 48 => 48, + 49 => 49, + 50 => 50, + 52 => 50, + 53 => 50, + 54 => 50, + 55 => 50, + 56 => 50, + 57 => 50, + 58 => 50, + 59 => 50, + 60 => 50, + 61 => 50, + 62 => 50, + 63 => 50, + 64 => 50, + 65 => 50, + 66 => 50, + 67 => 50, + 68 => 50, + 69 => 50, + 70 => 50, + 51 => 51, ); /* Beginning here are the reduction cases. A typical example ** follows: @@ -1234,23 +1251,23 @@ static public $yy_action = array( */ #line 29 "oql-parser.y" function yy_r0(){ $this->my_result = $this->yystack[$this->yyidx + 0]->minor; } -#line 1241 "oql-parser.php" +#line 1258 "oql-parser.php" #line 32 "oql-parser.y" function yy_r2(){ $this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor); } -#line 1246 "oql-parser.php" +#line 1263 "oql-parser.php" #line 35 "oql-parser.y" function yy_r3(){ $this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor); } -#line 1251 "oql-parser.php" +#line 1268 "oql-parser.php" #line 48 "oql-parser.y" function yy_r4(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1254 "oql-parser.php" +#line 1271 "oql-parser.php" #line 49 "oql-parser.y" function yy_r5(){ $this->_retvalue = null; } -#line 1257 "oql-parser.php" +#line 1274 "oql-parser.php" #line 51 "oql-parser.y" function yy_r6(){ // insert the join statement on top of the existing list @@ -1258,80 +1275,80 @@ static public $yy_action = array( // and return the updated array $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1265 "oql-parser.php" +#line 1282 "oql-parser.php" #line 57 "oql-parser.y" function yy_r7(){ $this->_retvalue = Array($this->yystack[$this->yyidx + 0]->minor); } -#line 1270 "oql-parser.php" +#line 1287 "oql-parser.php" #line 63 "oql-parser.y" function yy_r9(){ // create an array with one single item $this->_retvalue = new OqlJoinSpec($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1276 "oql-parser.php" +#line 1293 "oql-parser.php" #line 68 "oql-parser.y" function yy_r10(){ // create an array with one single item $this->_retvalue = new OqlJoinSpec($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1282 "oql-parser.php" +#line 1299 "oql-parser.php" #line 73 "oql-parser.y" function yy_r11(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, '=', $this->yystack[$this->yyidx + 0]->minor); } -#line 1285 "oql-parser.php" +#line 1302 "oql-parser.php" #line 75 "oql-parser.y" function yy_r12(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -#line 1288 "oql-parser.php" +#line 1305 "oql-parser.php" #line 80 "oql-parser.y" function yy_r16(){ $this->_retvalue = new FunctionOqlExpression($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor); } -#line 1291 "oql-parser.php" +#line 1308 "oql-parser.php" #line 81 "oql-parser.y" function yy_r17(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -#line 1294 "oql-parser.php" +#line 1311 "oql-parser.php" #line 82 "oql-parser.y" function yy_r18(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1297 "oql-parser.php" +#line 1314 "oql-parser.php" #line 97 "oql-parser.y" function yy_r27(){ $this->_retvalue = new ListOqlExpression($this->yystack[$this->yyidx + -1]->minor); } -#line 1302 "oql-parser.php" +#line 1319 "oql-parser.php" #line 100 "oql-parser.y" function yy_r28(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -#line 1307 "oql-parser.php" +#line 1324 "oql-parser.php" #line 103 "oql-parser.y" function yy_r29(){ array_push($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor; } -#line 1313 "oql-parser.php" +#line 1330 "oql-parser.php" #line 108 "oql-parser.y" function yy_r30(){ $this->_retvalue = array(); } -#line 1318 "oql-parser.php" +#line 1335 "oql-parser.php" #line 119 "oql-parser.y" function yy_r34(){ $this->_retvalue = new IntervalOqlExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); } -#line 1321 "oql-parser.php" -#line 128 "oql-parser.y" - function yy_r40(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); } -#line 1324 "oql-parser.php" +#line 1338 "oql-parser.php" #line 131 "oql-parser.y" - function yy_r42(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); } -#line 1327 "oql-parser.php" -#line 132 "oql-parser.y" - function yy_r43(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); } -#line 1330 "oql-parser.php" -#line 133 "oql-parser.y" - function yy_r44(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } -#line 1333 "oql-parser.php" + function yy_r43(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); } +#line 1341 "oql-parser.php" +#line 134 "oql-parser.y" + function yy_r45(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); } +#line 1344 "oql-parser.php" +#line 135 "oql-parser.y" + function yy_r46(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); } +#line 1347 "oql-parser.php" #line 136 "oql-parser.y" - function yy_r45(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); } -#line 1336 "oql-parser.php" -#line 138 "oql-parser.y" - function yy_r46(){ + function yy_r47(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } +#line 1350 "oql-parser.php" +#line 139 "oql-parser.y" + function yy_r48(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); } +#line 1353 "oql-parser.php" +#line 141 "oql-parser.y" + function yy_r49(){ if ($this->yystack[$this->yyidx + 0]->minor[0] == '`') { $name = substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2); @@ -1342,13 +1359,13 @@ static public $yy_action = array( } $this->_retvalue = new OqlName($name, $this->m_iColPrev); } -#line 1349 "oql-parser.php" -#line 150 "oql-parser.y" - function yy_r47(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } -#line 1352 "oql-parser.php" -#line 151 "oql-parser.y" - function yy_r48(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); } -#line 1355 "oql-parser.php" +#line 1366 "oql-parser.php" +#line 153 "oql-parser.y" + function yy_r50(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; } +#line 1369 "oql-parser.php" +#line 154 "oql-parser.y" + function yy_r51(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); } +#line 1372 "oql-parser.php" /** * placeholder for the left hand side in a reduce operation. @@ -1463,7 +1480,7 @@ static public $yy_action = array( #line 25 "oql-parser.y" throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCol, $this->tokenName($yymajor), $TOKEN); -#line 1471 "oql-parser.php" +#line 1488 "oql-parser.php" } /** @@ -1615,7 +1632,7 @@ throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCo } } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); } -}#line 199 "oql-parser.y" +}#line 202 "oql-parser.y" class OQLParserException extends OQLException @@ -1680,4 +1697,4 @@ class OQLParser extends OQLParserRaw } } -#line 1690 "oql-parser.php" +#line 1707 "oql-parser.php" diff --git a/core/oql/oql-parser.y b/core/oql/oql-parser.y index 6d0a5c555..9a4831f65 100644 --- a/core/oql/oql-parser.y +++ b/core/oql/oql-parser.y @@ -118,6 +118,9 @@ arg_list(A) ::= arg_list(L) COMA argument(X). { argument(A) ::= expression_prio4(X). { A = X; } argument(A) ::= INTERVAL expression_prio4(X) interval_unit(Y). { A = new IntervalOqlExpression(X, Y); } +interval_unit(A) ::= F_SECOND(X). { A = X; } +interval_unit(A) ::= F_MINUTE(X). { A = X; } +interval_unit(A) ::= F_HOUR(X). { A = X; } interval_unit(A) ::= F_DAY(X). { A = X; } interval_unit(A) ::= F_MONTH(X). { A = X; } interval_unit(A) ::= F_YEAR(X). { A = X; } diff --git a/core/userrights.class.inc.php b/core/userrights.class.inc.php index 0e8cfb21f..e831e9363 100644 --- a/core/userrights.class.inc.php +++ b/core/userrights.class.inc.php @@ -50,6 +50,7 @@ abstract class UserRightsAddOnAPI abstract public function Init(); // loads data (possible optimizations) abstract public function CheckCredentials($sLogin, $sPassword); // returns the id of the user or false abstract public function GetUserId($sLogin); // returns the id of the user or false + abstract public function GetContactId($sLogin); // returns the id of the "business" user or false abstract public function GetFilter($sLogin, $sClass); // returns a filter object abstract public function IsActionAllowed($iUserId, $sClass, $iActionCode, dbObjectSet $oInstances); abstract public function IsStimulusAllowed($iUserId, $sClass, $sStimulusCode, dbObjectSet $oInstances); @@ -171,6 +172,16 @@ class UserRights } } + public static function GetContactId($sName = '') + { + // note: returns null if the user management module is not related to the business data model + if (empty($sName)) + { + $sName = self::$m_sUser; + } + return self::$m_oAddOn->GetContactId($sName); + } + public static function GetRealUser() { return self::$m_sRealUser; diff --git a/pages/run_query.php b/pages/run_query.php index c53a4d1fc..76cd4bad8 100644 --- a/pages/run_query.php +++ b/pages/run_query.php @@ -7,48 +7,21 @@ require_once('../application/startup.inc.php'); require_once('../application/loginwebpage.class.inc.php'); login_web_page::DoLogin(); // Check user rights and prompt if needed -$sOperation = utils::ReadParam('operation', 'menu'); -$oContext = new UserContext(); -$oAppContext = new ApplicationContext(); -$iActiveNodeId = utils::ReadParam('menu', -1); -$currentOrganization = utils::ReadParam('org_id', ''); -$oP = new iTopWebPage("iTop - Expression Evaluation", $currentOrganization); - -// Main program -$sExpression = utils::ReadParam('expression', ''); -$sEncoding = utils::ReadParam('encoding', 'oql'); - -try +function ShowExamples($oP, $sExpression) { - if ($sEncoding == 'crypted') - { - // Translate $sExpression into a oql expression - $sClearText = base64_decode($sExpression); - echo "FYI: '$sClearText'
\n"; - $oFilter = DBObjectSearch::unserialize($sExpression); - $sExpression = $oFilter->ToOQL(); - exit; - } - else - { - // leave $sExpression as is - } - $aExamples = array( "Applications" => "SELECT bizApplication", "Changes planned on new year's day" => "SELECT bizChangeTicket AS ch WHERE ch.start_date >= '2009-12-31' AND ch.end_date <= '2010-01-01'", "Person having an 'A' in their name" => "SELECT bizPerson AS B WHERE B.name LIKE '%A%'", - "NW interfaces of equipment in production for customer 'Demo'" => "SELECT bizInterface AS if JOIN bizDevice AS dev ON if.device_id = dev.id WHERE if.status = 'production' AND dev.status = 'production' AND dev.org_name = 'Demo' AND if.physical_type = 'ethernet'" + "NW interfaces of equipment in production for customer 'Demo'" => "SELECT bizInterface AS if JOIN bizDevice AS dev ON if.device_id = dev.id WHERE if.status = 'production' AND dev.status = 'production' AND dev.org_name = 'Demo' AND if.physical_type = 'ethernet'", + "My tickets" => "SELECT bizIncidentTicket AS i WHERE i.agent_id = :current_contact_id", + "People being owner of an active ticket" => "SELECT bizPerson AS p JOIN bizIncidentTicket AS i ON i.agent_id = p.id WHERE i.ticket_status != 'Closed'", + "Contracts terminating in the next thirty days" => "SELECT bizContract AS c WHERE c.end_prod > NOW() AND c.end_prod < DATE_ADD(NOW(), INTERVAL 30 DAY)", + "Orphan tickets (opened one hour ago, still not assigned)" => "SELECT bizIncidentTicket AS i WHERE i.start_date < DATE_SUB(NOW(), INTERVAL 60 MINUTE) AND i.ticket_status = 'New'", + "Long lasting incidents (duration > 8 hours)" => "SELECT bizIncidentTicket AS i WHERE i.end_date > DATE_ADD(i.start_date, INTERVAL 8 HOUR)", ); - $oP->add("
\n"); - $oP->add("Expression to evaluate:
\n"); - $oP->add("\n"); - $oP->add("\n"); - $oP->add("
\n"); - - $oP->add("

Examples

\n"); $aDisplayData = array(); foreach($aExamples as $sDescription => $sOql) { @@ -70,8 +43,54 @@ try $aDisplayConfig['desc'] = array('label' => 'Target', 'description' => ''); $aDisplayConfig['oql'] = array('label' => 'OQL Expression', 'description' => ''); $aDisplayConfig['go'] = array('label' => '', 'description' => ''); + + $sStyle = "SearchDrawer DrawerClosed"; + $oP->add_ready_script("\$(\"#examples_drawer_handle_id\").click(function() {\$(\"#examples_contents_id\").slideToggle('normal'); $(\"#examples_drawer_handle_id\").toggleClass('open');});"); + $oP->add("
\n"); + $oP->table($aDisplayConfig, $aDisplayData); - + + $oP->add("
\n"); + $oP->add("
\n"); + $oP->add("
Some examples
\n"); +} + +$sOperation = utils::ReadParam('operation', 'menu'); +$oContext = new UserContext(); +$oAppContext = new ApplicationContext(); +$iActiveNodeId = utils::ReadParam('menu', -1); +$currentOrganization = utils::ReadParam('org_id', ''); + +$oP = new iTopWebPage("iTop - Expression Evaluation", $currentOrganization); + +// Main program +$sExpression = utils::ReadParam('expression', ''); +$sEncoding = utils::ReadParam('encoding', 'oql'); + +ShowExamples($oP, $sExpression); + +try +{ + if ($sEncoding == 'crypted') + { + // Translate $sExpression into a oql expression + $sClearText = base64_decode($sExpression); + echo "FYI: '$sClearText'
\n"; + $oFilter = DBObjectSearch::unserialize($sExpression); + $sExpression = $oFilter->ToOQL(); + exit; + } + else + { + // leave $sExpression as is + } + + $oP->add("
\n"); + $oP->add("Expression to evaluate:
\n"); + $oP->add("\n"); + $oP->add("\n"); + $oP->add("
\n"); + if (!empty($sExpression)) { $oFilter = DBObjectSearch::FromOQL($sExpression); @@ -82,7 +101,6 @@ try $oP->p('Serialized filter: '.$oFilter->serialize()); $oSet = new CMDBObjectSet($oFilter); - $oP->p('The query returned '.$oSet->count().' results(s)'); cmdbAbstractObject::DisplaySet($oP, $oSet); } }