~ubuntu-dev/ubuntu/lucid/zabbix/lucid-201002110857

« back to all changes in this revision

Viewing changes to frontends/php/include/screens.inc.php

  • Committer: Bazaar Package Importer
  • Author(s): Michael Ablassmeier
  • Date: 2007-07-02 09:06:51 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070702090651-8l6fl3fjw9rh6l2u
Tags: 1:1.4.1-2
Add patch from SVN in order to fix Incorrect processing of character '%'
in user parameters and remote commands.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
** along with this program; if not, write to the Free Software
18
18
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
19
**/
 
20
        
 
21
        require_once "include/events.inc.php";
 
22
        require_once "include/actions.inc.php";
20
23
?>
21
24
<?php
 
25
        function        screen_accessiable($screenid,$perm)
 
26
        {
 
27
                global $USER_DETAILS;
 
28
 
 
29
                $result = false;
 
30
 
 
31
                if(DBselect("select screenid from screens where screenid=".$screenid.
 
32
                        " and ".DBid2nodeid('screenid')." in (".get_accessible_nodes_by_user($USER_DETAILS,$perm).")"))
 
33
                {
 
34
                        $result = true;
 
35
                        
 
36
                        $denyed_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY, PERM_MODE_LT);
 
37
                        $denyed_groups = get_accessible_groups_by_user($USER_DETAILS,PERM_READ_ONLY, PERM_MODE_LT);
 
38
                        
 
39
                        $db_result = DBselect("select * from screens_items where screenid=".$screenid);
 
40
                        while(($ac_data = DBfetch($db_result)) && $result)
 
41
                        {
 
42
                                switch($ac_data['resourcetype'])
 
43
                                {
 
44
                                        case SCREEN_RESOURCE_GRAPH:
 
45
                                                $itemid = array();
 
46
 
 
47
                                                $db_gitems = DBselect("select distinct itemid from graphs_items ".
 
48
                                                        " where graphid=".$ac_data['resourceid']);
 
49
                                                
 
50
                                                while($gitem_data = DBfetch($db_gitems)) array_push($itemid, $gitem_data['itemid']);
 
51
                                                
 
52
                                                if(count($itemid) == 0) $itemid = array(-1);
 
53
                                                // break; /* use same processing as items */
 
54
                                        case SCREEN_RESOURCE_SIMPLE_GRAPH:
 
55
                                                // break; /* use same processing as items */
 
56
                                        case SCREEN_RESOURCE_PLAIN_TEXT:
 
57
                                                if(!isset($itemid))
 
58
                                                        $itemid = array($ac_data['resourceid']);
 
59
 
 
60
                                                if(DBfetch(DBselect("select itemid from items where itemid in (".implode(',',$itemid).") ".
 
61
                                                        " and hostid in (".$denyed_hosts.")")))
 
62
                                                {
 
63
                                                        $result = false;
 
64
                                                }       
 
65
 
 
66
                                                unset($itemid);
 
67
                                                break;
 
68
                                        case SCREEN_RESOURCE_MAP:
 
69
                                                $result &= sysmap_accessiable($ac_data['resourceid'], PERM_READ_ONLY);
 
70
                                                break;
 
71
                                        case SCREEN_RESOURCE_SCREEN:
 
72
                                                $result &= screen_accessiable($ac_data['resourceid'],PERM_READ_ONLY);
 
73
                                                break;
 
74
                                        case SCREEN_RESOURCE_SERVER_INFO:
 
75
                                        case SCREEN_RESOURCE_HOSTS_INFO:
 
76
                                        case SCREEN_RESOURCE_TRIGGERS_INFO:
 
77
                                        case SCREEN_RESOURCE_TRIGGERS_OVERVIEW:
 
78
                                        case SCREEN_RESOURCE_DATA_OVERVIEW:
 
79
                                        case SCREEN_RESOURCE_CLOCK:
 
80
                                        case SCREEN_RESOURCE_URL:
 
81
                                        case SCREEN_RESOURCE_ACTIONS:
 
82
                                        case SCREEN_RESOURCE_EVENTS:
 
83
                                                /* skip */
 
84
                                                break;
 
85
                                }
 
86
                        }
 
87
                }
 
88
                return $result;
 
89
        }
 
90
 
22
91
        function        add_screen($name,$hsize,$vsize)
23
92
        {
24
 
                if(!check_right("Screen","A",0))
25
 
                {
26
 
                        error("Insufficient permissions");
27
 
                        return 0;
28
 
                }
29
 
 
30
 
                $sql="insert into screens (name,hsize,vsize) values (".zbx_dbstr($name).",$hsize,$vsize)";
31
 
                return  DBexecute($sql);
 
93
                $screenid=get_dbid("screens","screenid");
 
94
                $sql="insert into screens (screenid,name,hsize,vsize) values ($screenid,".zbx_dbstr($name).",$hsize,$vsize)";
 
95
                $result=DBexecute($sql);
 
96
 
 
97
                if(!$result)
 
98
                        return $result;
 
99
 
 
100
                return $screenid;
32
101
        }
33
102
 
34
103
        function        update_screen($screenid,$name,$hsize,$vsize)
35
104
        {
36
 
                if(!check_right("Screen","U",0))
37
 
                {
38
 
                        error("Insufficient permissions");
39
 
                        return 0;
40
 
                }
41
 
 
42
105
                $sql="update screens set name=".zbx_dbstr($name).",hsize=$hsize,vsize=$vsize where screenid=$screenid";
43
106
                return  DBexecute($sql);
44
107
        }
51
114
                $result=DBexecute("delete from screens_items where resourceid=$screenid and resourcetype=".SCREEN_RESOURCE_SCREEN);
52
115
                if(!$result)    return  $result;
53
116
 
54
 
                // delete screen permisions
55
 
                DBexecute('delete from rights where name=\'Screen\' and id='.$screenid);
 
117
                $result=DBexecute('delete from slides where screenid='.$screenid);
 
118
                if(!$result)    return  $result;
56
119
 
57
120
                return  DBexecute("delete from screens where screenid=$screenid");
58
121
        }
61
124
        {
62
125
                $sql="delete from screens_items where screenid=$screenid and x=$x and y=$y";
63
126
                DBexecute($sql);
64
 
                $sql="insert into screens_items (resourcetype,screenid,x,y,resourceid,width,height,colspan,rowspan,elements,valign,halign,style,url)".
65
 
                        " values ($resourcetype,$screenid,$x,$y,$resourceid,$width,$height,$colspan,$rowspan,$elements,$valign,$halign,$style,".
66
 
                        zbx_dbstr($url).")";
67
 
                return  DBexecute($sql);
 
127
                $screenitemid=get_dbid("screens_items","screenitemid");
 
128
                $result=DBexecute("insert into screens_items (screenitemid,resourcetype,screenid,x,y,resourceid,width,height,".
 
129
                        " colspan,rowspan,elements,valign,halign,style,url) ".
 
130
                        " values ($screenitemid,$resourcetype,$screenid,$x,$y,$resourceid,".
 
131
                        " $width,$height,$colspan,$rowspan,$elements,$valign,$halign,$style,".
 
132
                        zbx_dbstr($url).")");
 
133
 
 
134
                if(!$result)
 
135
                        return $result;
 
136
 
 
137
                return $screenitemid;
68
138
        }
69
139
 
70
140
        function update_screen_item($screenitemid,$resourcetype,$resourceid,$width,$height,$colspan,$rowspan,$elements,$valign,$halign,$style,$url)
71
141
        {
72
 
                $sql="update screens_items set resourcetype=$resourcetype,resourceid=$resourceid,width=$width,height=$height,colspan=$colspan,rowspan=$rowspan,elements=$elements,valign=$valign,halign=$halign,style=$style,url=".zbx_dbstr($url)." where screenitemid=$screenitemid";
73
 
                return  DBexecute($sql);
 
142
                return  DBexecute("update screens_items set resourcetype=$resourcetype,resourceid=$resourceid,".
 
143
                        "width=$width,height=$height,colspan=$colspan,rowspan=$rowspan,elements=$elements,valign=$valign,".
 
144
                        "halign=$halign,style=$style,url=".zbx_dbstr($url)." where screenitemid=$screenitemid");
74
145
        }
75
146
 
76
147
        function delete_screen_item($screenitemid)
81
152
 
82
153
        function        get_screen_by_screenid($screenid)
83
154
        {
84
 
                $sql="select * from screens where screenid=$screenid"; 
85
 
                $result=DBselect($sql);
 
155
                $result = DBselect("select * from screens where screenid=$screenid");
86
156
                $row=DBfetch($result);
87
157
                if($row)
88
158
                {
89
159
                        return  $row;
90
160
                }
91
 
                error("No screen with screenid=[$screenid]");
 
161
                // error("No screen with screenid=[$screenid]");
92
162
                return FALSE;
93
163
        }
94
164
 
108
178
        
109
179
 
110
180
 
 
181
        function get_slideshow($slideshowid, $step, $effectiveperiod=NULL)
 
182
        {
 
183
                $slide_data = DBfetch(DBselect('select min(step) as min_step, max(step) as max_step from slides '.
 
184
                                        ' where slideshowid='.$slideshowid));
 
185
 
 
186
                if(!$slide_data || is_null($slide_data['min_step']))
 
187
                {
 
188
                        return new CTableInfo(S_NO_SLIDES_DEFINED);
 
189
                }
 
190
 
 
191
                if(!isset($step) || $step < $slide_data['min_step'] || $step > $slide_data['max_step'])
 
192
                {
 
193
                        $curr_step = $slide_data['min_step'];
 
194
                }
 
195
                else
 
196
                {
 
197
                        $curr_step = $step;
 
198
                }
 
199
                
 
200
                if(!isset($step))
 
201
                {
 
202
                        return new CIFrame('screens.php?config=1&fullscreen=2&elementid='.$slideshowid.'&step='.$curr_step.
 
203
                                        '&period='.$effectiveperiod.url_param('stime').url_param('from'));
 
204
                }
 
205
 
 
206
                $slide_data = DBfetch(DBselect('select sl.screenid,sl.delay,ss.delay as ss_delay from slides sl,slideshows ss '.
 
207
                                       ' where ss.slideshowid='.$slideshowid.' and ss.slideshowid=sl.slideshowid and sl.step='.$curr_step));
 
208
 
 
209
                if( $slide_data['delay'] <= 0 )
 
210
                {
 
211
                        $slide_data['delay'] = $slide_data['ss_delay'];
 
212
                }
 
213
 
 
214
                Redirect('screens.php?config=1&fullscreen=2&elementid='.$slideshowid.'&step='.($curr_step + 1).
 
215
                                '&period='.$effectiveperiod.url_param('stime').url_param('from'),
 
216
                                $slide_data['delay']);
 
217
 
 
218
                return get_screen($slide_data['screenid'],2,$effectiveperiod);
 
219
        }
 
220
 
111
221
        // editmode: 0 - view with actions, 1 - edit mode, 2 - view without any actions
112
222
        function get_screen($screenid, $editmode, $effectiveperiod=NULL)
113
223
        {
 
224
                if(!screen_accessiable($screenid, $editmode ? PERM_READ_WRITE : PERM_READ_ONLY))
 
225
                        access_deny();
 
226
                
114
227
                if(is_null($effectiveperiod)) 
115
228
                        $effectiveperiod = 3600;
116
229
 
117
230
                $result=DBselect("select name,hsize,vsize from screens where screenid=$screenid");
118
231
                $row=DBfetch($result);
119
 
                if(!$row) return new CSpan("Screen missing".BR);
 
232
                if(!$row) return new CTableInfo(S_NO_SCREENS_DEFINED);
120
233
 
121
234
                for($r=0;$r<$row["vsize"];$r++)
122
235
                {
144
257
                        }
145
258
                }
146
259
                $table = new CTable(
147
 
                        new CLink("No rows in screen ".$row["name"],"screenconf.php?form=update&screenid=".$screenid),
 
260
                        new CLink("No rows in screen ".$row["name"],"screenconf.php?config=0&form=update&screenid=".$screenid),
148
261
                        ($editmode == 0 || $editmode == 2) ? "screen_view" : "screen_edit");
149
262
        
150
263
                for($r=0;$r<$row["vsize"];$r++)
278
391
                                }
279
392
                                elseif( ($screenitemid!=0) && ($resourcetype==SCREEN_RESOURCE_TRIGGERS_OVERVIEW) )
280
393
                                {
281
 
                                        $item = array(get_triggers_overview($resourceid));
 
394
                                        global $ZBX_CURNODEID;
 
395
                                        $item = array(get_triggers_overview($resourceid, $ZBX_CURNODEID));
282
396
                                        if($editmode == 1)      array_push($item,new CLink(S_CHANGE,$action));
283
397
                                }
284
398
                                elseif( ($screenitemid!=0) && ($resourcetype==SCREEN_RESOURCE_DATA_OVERVIEW) )
285
399
                                {
286
 
                                        $item = array(get_items_data_overview($resourceid));
 
400
                                        global $ZBX_CURNODEID;
 
401
                                        $item = array(get_items_data_overview($resourceid, $ZBX_CURNODEID));
287
402
                                        if($editmode == 1)      array_push($item,new CLink(S_CHANGE,$action));
288
403
                                }
289
404
                                elseif( ($screenitemid!=0) && ($resourcetype==SCREEN_RESOURCE_URL) )
298
413
                                }
299
414
                                elseif( ($screenitemid!=0) && ($resourcetype==SCREEN_RESOURCE_EVENTS) )
300
415
                                {
301
 
                                        $item = array(get_history_of_events(0, $elements));
 
416
                                        $item = array(get_history_of_triggers_events(0, $elements));
302
417
                                        if($editmode == 1)      array_push($item,new CLink(S_CHANGE,$action));
303
418
                                }
304
419
                                else
328
443
                }
329
444
                return $table;
330
445
        }
 
446
 
 
447
        function        slideshow_accessiable($slideshowid, $perm)
 
448
        {
 
449
                global $USER_DETAILS;
 
450
 
 
451
                $result = false;
 
452
 
 
453
                if(DBselect("select slideshowid from slideshows where slideshowid=".$slideshowid.
 
454
                        " and ".DBid2nodeid('slideshowid')." in (".get_accessible_nodes_by_user($USER_DETAILS,$perm).")"))
 
455
                {
 
456
                        $result = true;
 
457
                        $db_slides = DBselect('select distinct screenid from slides where slideshowid='.$slideshowid);
 
458
                        while($slide_data = DBfetch($db_slides))
 
459
                        {
 
460
                                if( !($result = screen_accessiable($slide_data["screenid"], PERM_READ_ONLY)) ) break;
 
461
                        }
 
462
                }
 
463
                return $result;
 
464
        }
 
465
 
 
466
        function        get_slideshow_by_slideshowid($slideshowid)
 
467
        {
 
468
                return DBfetch(DBselect('select * from slideshows where slideshowid='.$slideshowid));
 
469
        }
 
470
 
 
471
        function        validate_slide($slide)
 
472
        {
 
473
                if(!screen_accessiable($slide["screenid"], PERM_READ_ONLY)) return false;
 
474
 
 
475
                if( !is_numeric($slide['delay']) ) return false;
 
476
 
 
477
                return true;
 
478
        }
 
479
 
 
480
        function        add_slideshow($name, $delay, $slides)
 
481
        {
 
482
                foreach($slides as $slide)
 
483
                {
 
484
                        if( !validate_slide($slide) )
 
485
                                return false;
 
486
                }
 
487
 
 
488
                $slideshowid = get_dbid('slideshows','slideshowid');
 
489
                $result = DBexecute('insert into slideshows (slideshowid,name,delay) '.
 
490
                        ' values ('.$slideshowid.','.zbx_dbstr($name).','.$delay.')');
 
491
 
 
492
                $i = 0;
 
493
                foreach($slides as $slide)
 
494
                {
 
495
                        $slideid = get_dbid('slides','slideid');
 
496
                        if( !($result = DBexecute('insert into slides (slideid,slideshowid,screenid,step,delay) '.
 
497
                                ' values ('.$slideid.','.$slideshowid.','.$slide['screenid'].','.($i++).','.$slide['delay'].')')) )
 
498
                        {
 
499
                                break;
 
500
                        }
 
501
                }
 
502
                
 
503
                if( !$result )
 
504
                {
 
505
                        delete_slideshow($slideshowid);
 
506
                        return false;
 
507
                }
 
508
                return $slideshowid;
 
509
        }
 
510
 
 
511
        function        update_slideshow($slideshowid, $name, $delay, $slides)
 
512
        {
 
513
                foreach($slides as $slide)
 
514
                {
 
515
                        if( !validate_slide($slide) )
 
516
                                return false;
 
517
                }
 
518
 
 
519
                if( !($result = DBexecute('update slideshows set name='.zbx_dbstr($name).',delay='.$delay.' where slideshowid='.$slideshowid)) )
 
520
                        return false;
 
521
 
 
522
                DBexecute('delete from slides where slideshowid='.$slideshowid);
 
523
 
 
524
                $i = 0;
 
525
                foreach($slides as $slide)
 
526
                {
 
527
                        $slideid = get_dbid('slides','slideid');
 
528
                        if( !($result = DBexecute('insert into slides (slideid,slideshowid,screenid,step,delay) '.
 
529
                                ' values ('.$slideid.','.$slideshowid.','.$slide['screenid'].','.($i++).','.$slide['delay'].')')) )
 
530
                        {
 
531
                                return false;
 
532
                        }
 
533
                }
 
534
                
 
535
                return true;
 
536
        }
 
537
 
 
538
        function        delete_slideshow($slideshowid)
 
539
        {
 
540
                return (
 
541
                        DBexecute('delete from slideshows where slideshowid='.$slideshowid) &&
 
542
                        DBexecute('delete from slides where slideshowid='.$slideshowid)
 
543
                );
 
544
        }
 
545
 
 
546
 
331
547
?>