1<?php
2/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
4/**
5 * Custom predicate built by supplying a string expression
6 *
7 * PHP versions 4 and 5
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330,Boston,MA 02111-1307 USA
22 *
23 * @category   File Formats
24 * @package    File_Archive
25 * @author     Vincent Lascaux <vincentlascaux@php.net>
26 * @copyright  1997-2005 The PHP Group
27 * @license    http://www.gnu.org/copyleft/lesser.html  LGPL
28 * @version    CVS: $Id: Custom.php,v 1.7 2005/04/21 10:01:46 vincentlascaux Exp $
29 * @link       http://pear.php.net/package/File_Archive
30 */
31
32require_once "File/Archive/Predicate.php";
33
34/**
35 * Custom predicate built by supplying a string expression
36 *
37 * Example:
38 *     new File_Archive_Predicate_Custom("return strlen($name)<100;")
39 *     new File_Archive_Predicate_Custom("strlen($name)<100;")
40 *     new File_Archive_Predicate_Custom("strlen($name)<100")
41 *     new File_Archive_Predicate_Custom("strlen($source->getFilename())<100")
42 *
43 * @see        File_Archive_Predicate, File_Archive_Reader_Filter
44 */
45class File_Archive_Predicate_Custom extends File_Archive_Predicate
46{
47    var $expression;
48    var $useName;
49    var $useStat;
50    var $useMIME;
51
52    /**
53     * @param string $expression PHP code that evaluates too a boolean
54     *        It can use the $source variable. If return is ommited, it will be
55     *        added to the begining of the expression. A ; will also be added at
56     *        the end so that you don't need to write it
57     */
58    function File_Archive_Predicate_Custom($expression)
59    {
60        $this->expression = $expression.";";
61        if (strpos($this->expression, "return") === false) {
62            $this->expression = "return ".$this->expression;
63        }
64        $this->useName = (strpos($this->expression, '$name') !== false);
65        $this->useStat = (strpos($this->expression, '$stat') !== false);
66        $this->useMIME = (strpos($this->expression, '$mime') !== false);
67    }
68    /**
69     * @see File_Archive_Predicate::isTrue()
70     */
71    function isTrue(&$source)
72    {
73        if ($this->useName) {
74            $name = $source->getFilename();
75        }
76        if ($this->useStat) {
77            $stat = $source->getStat();
78            $size = $stat[7];
79            $time = (isset($stat[9]) ? $stat[9] : null);
80        }
81        if ($this->useMIME) {
82            $mime = $source->getMIME();
83        }
84        return eval($this->expression);
85    }
86}
87
88?>