1<?php
2/**
3 * @package Horde
4 */
5class Horde_Block_Fortune extends Horde_Core_Block
6{
7    /**
8     */
9    public $updateable = true;
10
11    /**
12     */
13    public function __construct($app, $params = array())
14    {
15        parent::__construct($app, $params);
16
17        $this->enabled = (isset($GLOBALS['conf']['fortune']['exec_path']) && is_executable($GLOBALS['conf']['fortune']['exec_path']));
18        $this->_name = _("Random Fortune");
19    }
20
21    /**
22     */
23    protected function _title()
24    {
25        return _("Fortune");
26    }
27
28    /**
29     */
30    protected function _params()
31    {
32        global $conf;
33
34        $descriptions = array(
35            'art' => _("Art"),
36            'ascii-art' => _("Ascii Art"),
37            'bofh-excuses' => _("BOFH Excuses"),
38            'computers' => _("Computers"),
39            'cookie' => _("Cookie"),
40            'definitions' => _("Definitions"),
41            'drugs' => _("Drugs"),
42            'education' => _("Education"),
43            'ethnic' => _("Ethnic"),
44            'food' => _("Food"),
45            'fortunes' => _("Fortunes"),
46            'fortunes2' => _("Fortunes 2"),
47            'goedel' => _("Goedel"),
48            'humorists' => _("Humorists"),
49            'kernelnewbies' => _("Kernel Newbies"),
50            'kids' => _("Kids"),
51            'law' => _("Law"),
52            'limerick' => _("Limerick"),
53            'linuxcookie' => _("Linux Cookie"),
54            'literature' => _("Literature"),
55            'love' => _("Love"),
56            'magic' => _("Magic"),
57            'medicine' => _("Medicine"),
58            'miscellaneous' => _("Miscellaneous"),
59            'news' => _("News"),
60            'osfortune' => _("Operating System"),
61            'people' => _("People"),
62            'pets' => _("Pets"),
63            'platitudes' => _("Platitudes"),
64            'politics' => _("Politics"),
65            'riddles' => _("Riddles"),
66            'science' => _("Science"),
67            'songs-poems' => _("Songs & Poems"),
68            'sports' => _("Sports"),
69            'startrek' => _("Star Trek"),
70            'translate-me' => _("Translations"),
71            'wisdom' => _("Wisdom"),
72            'work' => _("Work"),
73            'zippy' => _("Zippy")
74        );
75
76        $values = array();
77
78        exec($conf['fortune']['exec_path'] . ' -f 2>&1', $output, $status);
79        if (!$status) {
80            for ($i = 1, $ocnt = count($output); $i < $ocnt; ++$i) {
81                $fortune = substr($output[$i], strrpos($output[$i], ' ') + 1);
82                $values[$fortune] = isset($descriptions[$fortune])
83                    ? $descriptions[$fortune]
84                    : $fortune;
85            }
86        }
87
88        if (empty($values)) {
89            $values = $descriptions;
90        }
91
92        asort($values);
93        $values = array_merge(array('' => _("All")), $values);
94
95        return array(
96            'offend' => array(
97                'type' => 'enum',
98                'name' => _("Offense filter"),
99                'default' => '',
100                'values' => array(
101                    '' => _("No offensive fortunes"),
102                    ' -o' => _("Only offensive fortunes"),
103                    ' -a' => _("Both")
104                )
105            ),
106            'fortune' => array(
107                'type' => 'multienum',
108                'name' => _("Fortune type"),
109                'default' => array(''),
110                'values' => $values
111            )
112        );
113    }
114
115    /**
116     */
117    protected function _content()
118    {
119        global $conf;
120
121        $cmdLine = $conf['fortune']['exec_path']
122            . $this->_params['offend']
123            . ' ' . implode(' ', $this->_params['fortune']);
124
125        return '<span class="fixed"><small>'
126            . nl2br($GLOBALS['injector']->getInstance('Horde_Core_Factory_TextFilter')->filter(shell_exec($cmdLine), array('space2html'), array(array('encode' => true))))
127            . '</small></span>';
128    }
129
130}
131