HOR-3470-HQ

This commit is contained in:
hjonathan
2017-08-11 12:33:30 -04:00
parent 07f0a36aef
commit 9777285e72
9 changed files with 1006 additions and 1120 deletions

View File

@@ -1,70 +1,26 @@
<?php <?php
/**
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2012 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 5304 Ventura Drive,
* Delray Beach, FL, 33484, USA, or email info@colosa.com.
*
*/
require_once "classes/model/Application.php";
require_once "classes/model/AppDelegation.php";
require_once "classes/model/AppThread.php";
require_once "classes/model/Content.php";
require_once "classes/model/Users.php";
require_once "classes/model/GroupUser.php";
require_once "classes/model/Task.php";
require_once "classes/model/TaskUser.php";
require_once "classes/model/Dynaform.php";
require_once "classes/model/ProcessVariables.php";
require_once "entities/SolrRequestData.php";
require_once "entities/SolrUpdateDocument.php";
require_once "entities/AppSolrQueue.php";
require_once "classes/model/AppSolrQueue.php";
/**
* Invalid search text for Solr exception
*
* @author Herbert Saal Gutierrez
*
*/
/** /**
* Application without Delegations exception * Application without Delegations exception
* *
* @author Herbert Saal Gutierrez * @author Herbert Saal Gutierrez
* *
* @category Colosa * @category Colosa
* @copyright Copyright (c) 2005-2012 Colosa Inc. (http://www.colosa.com) * @copyright Copyright (c) 2005-2012 Colosa Inc. (http://www.colosa.com)
*/class ApplicationWithoutDelegationRecordsException extends Exception */
class ApplicationWithoutDelegationRecordsException extends Exception
{ {
// Redefine the exception so message isn't optional // Redefine the exception so message isn't optional
public function __construct($message, $code = 0) public function __construct($message, $code = 0)
{ {
// some code // some code
// make sure everything is assigned properly // make sure everything is assigned properly
parent::__construct ($message, $code); parent::__construct($message, $code);
} }
// custom string representation of object // custom string representation of object
public function __toString() public function __toString()
{ {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
} }
} }

View File

@@ -16,11 +16,7 @@
* *
* @package workflow.engine.classes * @package workflow.engine.classes
*/ */
class Archive
/**
*
* @package workflow.engine.classes
*/class archive
{ {
/** /**
@@ -30,14 +26,14 @@
* @return void * @return void
* *
*/ */
public function archive ($name) public function archive($name)
{ {
$this->options = array ('basedir' => ".",'name' => $name,'prepend' => "",'inmemory' => 0,'overwrite' => 0,'recurse' => 1,'storepaths' => 1,'followlinks' => 0,'level' => 3,'method' => 1,'sfx' => "",'type' => "",'comment' => "" $this->options = array('basedir' => ".", 'name' => $name, 'prepend' => "", 'inmemory' => 0, 'overwrite' => 0, 'recurse' => 1, 'storepaths' => 1, 'followlinks' => 0, 'level' => 3, 'method' => 1, 'sfx' => "", 'type' => "", 'comment' => ""
); );
$this->files = array (); $this->files = array();
$this->exclude = array (); $this->exclude = array();
$this->storeonly = array (); $this->storeonly = array();
$this->error = array (); $this->error = array();
} }
/** /**
@@ -46,25 +42,25 @@
* @param array $options * @param array $options
* @return void * @return void
*/ */
public function set_options ($options) public function set_options($options)
{ {
foreach ($options as $key => $value) { foreach ($options as $key => $value) {
$this->options[$key] = $value; $this->options[$key] = $value;
} }
if (! empty( $this->options['basedir'] )) { if (!empty($this->options['basedir'])) {
$this->options['basedir'] = str_replace( "\\", "/", $this->options['basedir'] ); $this->options['basedir'] = str_replace("\\", "/", $this->options['basedir']);
$this->options['basedir'] = preg_replace( "/\/+/", "/", $this->options['basedir'] ); $this->options['basedir'] = preg_replace("/\/+/", "/", $this->options['basedir']);
$this->options['basedir'] = preg_replace( "/\/$/", "", $this->options['basedir'] ); $this->options['basedir'] = preg_replace("/\/$/", "", $this->options['basedir']);
} }
if (! empty( $this->options['name'] )) { if (!empty($this->options['name'])) {
$this->options['name'] = str_replace( "\\", "/", $this->options['name'] ); $this->options['name'] = str_replace("\\", "/", $this->options['name']);
$this->options['name'] = preg_replace( "/\/+/", "/", $this->options['name'] ); $this->options['name'] = preg_replace("/\/+/", "/", $this->options['name']);
} }
if (! empty( $this->options['prepend'] )) { if (!empty($this->options['prepend'])) {
$this->options['prepend'] = str_replace( "\\", "/", $this->options['prepend'] ); $this->options['prepend'] = str_replace("\\", "/", $this->options['prepend']);
$this->options['prepend'] = preg_replace( "/^(\.*\/+)+/", "", $this->options['prepend'] ); $this->options['prepend'] = preg_replace("/^(\.*\/+)+/", "", $this->options['prepend']);
$this->options['prepend'] = preg_replace( "/\/+/", "/", $this->options['prepend'] ); $this->options['prepend'] = preg_replace("/\/+/", "/", $this->options['prepend']);
$this->options['prepend'] = preg_replace( "/\/$/", "", $this->options['prepend'] ) . "/"; $this->options['prepend'] = preg_replace("/\/$/", "", $this->options['prepend']) . "/";
} }
} }
@@ -73,21 +69,21 @@
* *
* @return boolean * @return boolean
*/ */
public function create_archive () public function create_archive()
{ {
$this->make_list(); $this->make_list();
if ($this->options['inmemory'] == 0) { if ($this->options['inmemory'] == 0) {
$pwd = getcwd(); $pwd = getcwd();
chdir( $this->options['basedir'] ); chdir($this->options['basedir']);
if ($this->options['overwrite'] == 0 && file_exists( $this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : "") )) { if ($this->options['overwrite'] == 0 && file_exists($this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""))) {
$this->error[] = "File {$this->options['name']} already exist."; $this->error[] = "File {$this->options['name']} already exist.";
chdir( $pwd ); chdir($pwd);
return 0; return 0;
} elseif ($this->archive = @fopen( $this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""), "wb+" )) { } elseif ($this->archive = @fopen($this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""), "wb+")) {
chdir( $pwd ); chdir($pwd);
} else { } else {
$this->error[] = "Could not open {$this->options['name']} for writing."; $this->error[] = "Could not open {$this->options['name']} for writing.";
chdir( $pwd ); chdir($pwd);
return 0; return 0;
} }
} else { } else {
@@ -95,41 +91,41 @@
} }
switch ($this->options['type']) { switch ($this->options['type']) {
case "zip": case "zip":
if (! $this->create_zip()) { if (!$this->create_zip()) {
$this->error[] = "Could not create zip file."; $this->error[] = "Could not create zip file.";
return 0; return 0;
} }
break; break;
case "bzip": case "bzip":
if (! $this->create_tar()) { if (!$this->create_tar()) {
$this->error[] = "Could not create tar file."; $this->error[] = "Could not create tar file.";
return 0; return 0;
} }
if (! $this->create_bzip()) { if (!$this->create_bzip()) {
$this->error[] = "Could not create bzip2 file."; $this->error[] = "Could not create bzip2 file.";
return 0; return 0;
} }
break; break;
case "gzip": case "gzip":
if (! $this->create_tar()) { if (!$this->create_tar()) {
$this->error[] = "Could not create tar file."; $this->error[] = "Could not create tar file.";
return 0; return 0;
} }
if (! $this->create_gzip()) { if (!$this->create_gzip()) {
$this->error[] = "Could not create gzip file."; $this->error[] = "Could not create gzip file.";
return 0; return 0;
} }
break; break;
case "tar": case "tar":
if (! $this->create_tar()) { if (!$this->create_tar()) {
$this->error[] = "Could not create tar file."; $this->error[] = "Could not create tar file.";
return 0; return 0;
} }
} }
if ($this->options['inmemory'] == 0) { if ($this->options['inmemory'] == 0) {
fclose( $this->archive ); fclose($this->archive);
if ($this->options['type'] == "gzip" || $this->options['type'] == "bzip") { if ($this->options['type'] == "gzip" || $this->options['type'] == "bzip") {
unlink( $this->options['basedir'] . "/" . $this->options['name'] . ".tmp" ); unlink($this->options['basedir'] . "/" . $this->options['name'] . ".tmp");
} }
} }
} }
@@ -140,10 +136,10 @@
* @param string $data * @param string $data
* @return void * @return void
*/ */
public function add_data ($data) public function add_data($data)
{ {
if ($this->options['inmemory'] == 0) { if ($this->options['inmemory'] == 0) {
fwrite( $this->archive, $data ); fwrite($this->archive, $data);
} else { } else {
$this->archive .= $data; $this->archive .= $data;
} }
@@ -154,18 +150,18 @@
* *
* @return void * @return void
*/ */
public function make_list () public function make_list()
{ {
if (! empty( $this->exclude )) { if (!empty($this->exclude)) {
foreach ($this->files as $key => $value) { foreach ($this->files as $key => $value) {
foreach ($this->exclude as $current) { foreach ($this->exclude as $current) {
if ($value['name'] == $current['name']) { if ($value['name'] == $current['name']) {
unset( $this->files[$key] ); unset($this->files[$key]);
} }
} }
} }
} }
if (! empty( $this->storeonly )) { if (!empty($this->storeonly)) {
foreach ($this->files as $key => $value) { foreach ($this->files as $key => $value) {
foreach ($this->storeonly as $current) { foreach ($this->storeonly as $current) {
if ($value['name'] == $current['name']) { if ($value['name'] == $current['name']) {
@@ -174,7 +170,7 @@
} }
} }
} }
unset( $this->exclude, $this->storeonly ); unset($this->exclude, $this->storeonly);
} }
/** /**
@@ -183,9 +179,9 @@
* @param array $list * @param array $list
* @return void * @return void
*/ */
public function add_files ($list) public function add_files($list)
{ {
$temp = $this->list_files( $list ); $temp = $this->list_files($list);
foreach ($temp as $current) { foreach ($temp as $current) {
$this->files[] = $current; $this->files[] = $current;
} }
@@ -197,9 +193,9 @@
* @param array $list * @param array $list
* @return void * @return void
*/ */
public function exclude_files ($list) public function exclude_files($list)
{ {
$temp = $this->list_files( $list ); $temp = $this->list_files($list);
foreach ($temp as $current) { foreach ($temp as $current) {
$this->exclude[] = $current; $this->exclude[] = $current;
} }
@@ -210,9 +206,9 @@
* *
* @param array $list * @param array $list
*/ */
public function store_files ($list) public function store_files($list)
{ {
$temp = $this->list_files( $list ); $temp = $this->list_files($list);
foreach ($temp as $current) { foreach ($temp as $current) {
$this->storeonly[] = $current; $this->storeonly[] = $current;
} }
@@ -224,47 +220,47 @@
* @param array $list * @param array $list
* @return array * @return array
*/ */
public function list_files ($list) public function list_files($list)
{ {
if (! is_array( $list )) { if (!is_array($list)) {
$temp = $list; $temp = $list;
$list = array ($temp $list = array($temp
); );
unset( $temp ); unset($temp);
} }
$files = array (); $files = array();
$pwd = getcwd(); $pwd = getcwd();
chdir( $this->options['basedir'] ); chdir($this->options['basedir']);
foreach ($list as $current) { foreach ($list as $current) {
$current = str_replace( "\\", "/", $current ); $current = str_replace("\\", "/", $current);
$current = preg_replace( "/\/+/", "/", $current ); $current = preg_replace("/\/+/", "/", $current);
$current = preg_replace( "/\/$/", "", $current ); $current = preg_replace("/\/$/", "", $current);
if (strstr( $current, "*" )) { if (strstr($current, "*")) {
$regex = preg_replace( "/([\\\^\$\.\[\]\|\(\)\?\+\{\}\/])/", "\\\\\\1", $current ); $regex = preg_replace("/([\\\^\$\.\[\]\|\(\)\?\+\{\}\/])/", "\\\\\\1", $current);
$regex = str_replace( "*", ".*", $regex ); $regex = str_replace("*", ".*", $regex);
$dir = strstr( $current, "/" ) ? substr( $current, 0, strrpos( $current, "/" ) ) : "."; $dir = strstr($current, "/") ? substr($current, 0, strrpos($current, "/")) : ".";
$temp = $this->parse_dir( $dir ); $temp = $this->parse_dir($dir);
foreach ($temp as $current2) { foreach ($temp as $current2) {
if (preg_match( "/^{$regex}$/i", $current2['name'] )) { if (preg_match("/^{$regex}$/i", $current2['name'])) {
$files[] = $current2; $files[] = $current2;
} }
} }
unset( $regex, $dir, $temp, $current ); unset($regex, $dir, $temp, $current);
} elseif (@is_dir( $current )) { } elseif (@is_dir($current)) {
$temp = $this->parse_dir( $current ); $temp = $this->parse_dir($current);
foreach ($temp as $file) { foreach ($temp as $file) {
$files[] = $file; $files[] = $file;
} }
unset( $temp, $file ); unset($temp, $file);
} elseif (@file_exists( $current )) { } elseif (@file_exists($current)) {
$files[] = array ('name' => $current,'name2' => $this->options['prepend'] . preg_replace( "/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr( $current, "/" )) ? substr( $current, strrpos( $current, "/" ) + 1 ) : $current ),'type' => @is_link( $current ) && $this->options['followlinks'] == 0 ? 2 : 0,'ext' => substr( $current, strrpos( $current, "." ) ),'stat' => stat( $current ) $files[] = array('name' => $current, 'name2' => $this->options['prepend'] . preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($current, "/")) ? substr($current, strrpos($current, "/") + 1) : $current), 'type' => @is_link($current) && $this->options['followlinks'] == 0 ? 2 : 0, 'ext' => substr($current, strrpos($current, ".")), 'stat' => stat($current)
); );
} }
} }
chdir( $pwd ); chdir($pwd);
unset( $current, $pwd ); unset($current, $pwd);
usort( $files, array ("archive","sort_files" usort($files, array("archive", "sort_files"
) ); ));
return $files; return $files;
} }
@@ -274,34 +270,34 @@
* @param string $dirname * @param string $dirname
* @return array * @return array
*/ */
public function parse_dir ($dirname) public function parse_dir($dirname)
{ {
if ($this->options['storepaths'] == 1 && ! preg_match( "/^(\.+\/*)+$/", $dirname )) { if ($this->options['storepaths'] == 1 && !preg_match("/^(\.+\/*)+$/", $dirname)) {
$files = array (array ('name' => $dirname,'name2' => $this->options['prepend'] . preg_replace( "/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr( $dirname, "/" )) ? substr( $dirname, strrpos( $dirname, "/" ) + 1 ) : $dirname ),'type' => 5,'stat' => stat( $dirname ) $files = array(array('name' => $dirname, 'name2' => $this->options['prepend'] . preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($dirname, "/")) ? substr($dirname, strrpos($dirname, "/") + 1) : $dirname), 'type' => 5, 'stat' => stat($dirname)
) )
); );
} else { } else {
$files = array (); $files = array();
} }
$dir = @opendir( $dirname ); $dir = @opendir($dirname);
while ($file = @readdir( $dir )) { while ($file = @readdir($dir)) {
$fullname = $dirname . "/" . $file; $fullname = $dirname . "/" . $file;
if ($file == "." || $file == "..") { if ($file == "." || $file == "..") {
continue; continue;
} elseif (@is_dir( $fullname )) { } elseif (@is_dir($fullname)) {
if (empty( $this->options['recurse'] )) { if (empty($this->options['recurse'])) {
continue; continue;
} }
$temp = $this->parse_dir( $fullname ); $temp = $this->parse_dir($fullname);
foreach ($temp as $file2) { foreach ($temp as $file2) {
$files[] = $file2; $files[] = $file2;
} }
} elseif (@file_exists( $fullname )) { } elseif (@file_exists($fullname)) {
$files[] = array ('name' => $fullname,'name2' => $this->options['prepend'] . preg_replace( "/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr( $fullname, "/" )) ? substr( $fullname, strrpos( $fullname, "/" ) + 1 ) : $fullname ),'type' => @is_link( $fullname ) && $this->options['followlinks'] == 0 ? 2 : 0,'ext' => substr( $file, strrpos( $file, "." ) ),'stat' => stat( $fullname ) $files[] = array('name' => $fullname, 'name2' => $this->options['prepend'] . preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($fullname, "/")) ? substr($fullname, strrpos($fullname, "/") + 1) : $fullname), 'type' => @is_link($fullname) && $this->options['followlinks'] == 0 ? 2 : 0, 'ext' => substr($file, strrpos($file, ".")), 'stat' => stat($fullname)
); );
} }
} }
@closedir( $dir ); @closedir($dir);
return $files; return $files;
} }
@@ -312,21 +308,21 @@
* @param array $b * @param array $b
* @return boolean * @return boolean
*/ */
public function sort_files ($a, $b) public function sort_files($a, $b)
{ {
if ($a['type'] != $b['type']) { if ($a['type'] != $b['type']) {
if ($a['type'] == 5 || $b['type'] == 2) { if ($a['type'] == 5 || $b['type'] == 2) {
return - 1; return -1;
} elseif ($a['type'] == 2 || $b['type'] == 5) { } elseif ($a['type'] == 2 || $b['type'] == 5) {
return 1; return 1;
} elseif ($a['type'] == 5) { } elseif ($a['type'] == 5) {
return strcmp( strtolower( $a['name'] ), strtolower( $b['name'] ) ); return strcmp(strtolower($a['name']), strtolower($b['name']));
} elseif ($a['ext'] != $b['ext']) { } elseif ($a['ext'] != $b['ext']) {
return strcmp( $a['ext'], $b['ext'] ); return strcmp($a['ext'], $b['ext']);
} elseif ($a['stat'][7] != $b['stat'][7]) { } elseif ($a['stat'][7] != $b['stat'][7]) {
return $a['stat'][7] > $b['stat'][7] ? - 1 : 1; return $a['stat'][7] > $b['stat'][7] ? -1 : 1;
} else { } else {
return strcmp( strtolower( $a['name'] ), strtolower( $b['name'] ) ); return strcmp(strtolower($a['name']), strtolower($b['name']));
} }
} }
return 0; return 0;
@@ -337,7 +333,7 @@
* *
* @return void * @return void
*/ */
public function download_file () public function download_file()
{ {
if ($this->options['inmemory'] == 0) { if ($this->options['inmemory'] == 0) {
$this->error[] = "Can only use download_file() if archive is in memory. Redirect to file otherwise, it is faster."; $this->error[] = "Can only use download_file() if archive is in memory. Redirect to file otherwise, it is faster.";
@@ -345,25 +341,25 @@
} }
switch ($this->options['type']) { switch ($this->options['type']) {
case "zip": case "zip":
header( "Content-Type: application/zip" ); header("Content-Type: application/zip");
break; break;
case "bzip": case "bzip":
header( "Content-Type: application/x-bzip2" ); header("Content-Type: application/x-bzip2");
break; break;
case "gzip": case "gzip":
header( "Content-Type: application/x-gzip" ); header("Content-Type: application/x-gzip");
break; break;
case "tar": case "tar":
header( "Content-Type: application/x-tar" ); header("Content-Type: application/x-tar");
} }
$header = "Content-Disposition: attachment; filename=\""; $header = "Content-Disposition: attachment; filename=\"";
$header .= strstr( $this->options['name'], "/" ) ? substr( $this->options['name'], strrpos( $this->options['name'], "/" ) + 1 ) : $this->options['name']; $header .= strstr($this->options['name'], "/") ? substr($this->options['name'], strrpos($this->options['name'], "/") + 1) : $this->options['name'];
$header .= "\""; $header .= "\"";
header( $header ); header($header);
header( "Content-Length: " . strlen( $this->archive ) ); header("Content-Length: " . strlen($this->archive));
header( "Content-Transfer-Encoding: binary" ); header("Content-Transfer-Encoding: binary");
header( "Cache-Control: no-cache, must-revalidate, max-age=60" ); header("Cache-Control: no-cache, must-revalidate, max-age=60");
header( "Expires: Sat, 01 Jan 2000 12:00:00 GMT" ); header("Expires: Sat, 01 Jan 2000 12:00:00 GMT");
print ($this->archive) ; print ($this->archive);
} }
} }

View File

@@ -1,50 +1,19 @@
<?php <?php
/**
* class.ArrayPeer.php
*
* @package workflow.engine.classes
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2011 Colosa Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
*/
require_once 'propel/util/BasePeer.php'; require_once 'propel/util/BasePeer.php';
// The object
/** /**
* Base static class for performing query and update operations on the 'APPLICATION' table. * Base static class for performing query and update operations on the 'APPLICATION' table.
* *
* @package workflow.engine.classes * @package workflow.engine.classes
*/abstract class ArrayBasePeer */
abstract class ArrayBasePeer
{ {
/** /**
* The default database name for this class * The default database name for this class
*/ */
const DATABASE_NAME = 'dbarray'; const DATABASE_NAME = 'dbarray';
/**
* The table name for this class
*/
//const TABLE_NAME = 'APPLICATION';
/** /**
* A class that can be returned by this peer. * A class that can be returned by this peer.
*/ */
@@ -146,10 +115,10 @@ require_once 'propel/util/BasePeer.php';
* First dimension keys are the type constants * First dimension keys are the type constants
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/ */
private static $fieldNames = array (BasePeer::TYPE_PHPNAME => array ('AppUid','AppNumber','AppParent','AppStatus','ProUid','AppProcStatus','AppProcCode','AppParallel','AppInitUser','AppCurUser','AppCreateDate','AppInitDate','AppFinishDate','AppUpdateDate','AppData' private static $fieldNames = array(BasePeer::TYPE_PHPNAME => array('AppUid', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData'
),BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID,ApplicationPeer::APP_NUMBER,ApplicationPeer::APP_PARENT,ApplicationPeer::APP_STATUS,ApplicationPeer::PRO_UID,ApplicationPeer::APP_PROC_STATUS,ApplicationPeer::APP_PROC_CODE,ApplicationPeer::APP_PARALLEL,ApplicationPeer::APP_INIT_USER,ApplicationPeer::APP_CUR_USER,ApplicationPeer::APP_CREATE_DATE,ApplicationPeer::APP_INIT_DATE,ApplicationPeer::APP_FINISH_DATE,ApplicationPeer::APP_UPDATE_DATE,ApplicationPeer::APP_DATA ), BasePeer::TYPE_COLNAME => array(ApplicationPeer::APP_UID, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA
),BasePeer::TYPE_FIELDNAME => array ('APP_UID','APP_NUMBER','APP_PARENT','APP_STATUS','PRO_UID','APP_PROC_STATUS','APP_PROC_CODE','APP_PARALLEL','APP_INIT_USER','APP_CUR_USER','APP_CREATE_DATE','APP_INIT_DATE','APP_FINISH_DATE','APP_UPDATE_DATE','APP_DATA' ), BasePeer::TYPE_FIELDNAME => array('APP_UID', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA'
),BasePeer::TYPE_NUM => array (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 ), BasePeer::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
) )
); );
@@ -159,10 +128,10 @@ require_once 'propel/util/BasePeer.php';
* First dimension keys are the type constants * First dimension keys are the type constants
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/ */
private static $fieldKeys = array (BasePeer::TYPE_PHPNAME => array ('AppUid' => 0,'AppNumber' => 1,'AppParent' => 2,'AppStatus' => 3,'ProUid' => 4,'AppProcStatus' => 5,'AppProcCode' => 6,'AppParallel' => 7,'AppInitUser' => 8,'AppCurUser' => 9,'AppCreateDate' => 10,'AppInitDate' => 11,'AppFinishDate' => 12,'AppUpdateDate' => 13,'AppData' => 14 private static $fieldKeys = array(BasePeer::TYPE_PHPNAME => array('AppUid' => 0, 'AppNumber' => 1, 'AppParent' => 2, 'AppStatus' => 3, 'ProUid' => 4, 'AppProcStatus' => 5, 'AppProcCode' => 6, 'AppParallel' => 7, 'AppInitUser' => 8, 'AppCurUser' => 9, 'AppCreateDate' => 10, 'AppInitDate' => 11, 'AppFinishDate' => 12, 'AppUpdateDate' => 13, 'AppData' => 14
),BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0,ApplicationPeer::APP_NUMBER => 1,ApplicationPeer::APP_PARENT => 2,ApplicationPeer::APP_STATUS => 3,ApplicationPeer::PRO_UID => 4,ApplicationPeer::APP_PROC_STATUS => 5,ApplicationPeer::APP_PROC_CODE => 6,ApplicationPeer::APP_PARALLEL => 7,ApplicationPeer::APP_INIT_USER => 8,ApplicationPeer::APP_CUR_USER => 9,ApplicationPeer::APP_CREATE_DATE => 10,ApplicationPeer::APP_INIT_DATE => 11,ApplicationPeer::APP_FINISH_DATE => 12,ApplicationPeer::APP_UPDATE_DATE => 13,ApplicationPeer::APP_DATA => 14 ), BasePeer::TYPE_COLNAME => array(ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_NUMBER => 1, ApplicationPeer::APP_PARENT => 2, ApplicationPeer::APP_STATUS => 3, ApplicationPeer::PRO_UID => 4, ApplicationPeer::APP_PROC_STATUS => 5, ApplicationPeer::APP_PROC_CODE => 6, ApplicationPeer::APP_PARALLEL => 7, ApplicationPeer::APP_INIT_USER => 8, ApplicationPeer::APP_CUR_USER => 9, ApplicationPeer::APP_CREATE_DATE => 10, ApplicationPeer::APP_INIT_DATE => 11, ApplicationPeer::APP_FINISH_DATE => 12, ApplicationPeer::APP_UPDATE_DATE => 13, ApplicationPeer::APP_DATA => 14
),BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0,'APP_NUMBER' => 1,'APP_PARENT' => 2,'APP_STATUS' => 3,'PRO_UID' => 4,'APP_PROC_STATUS' => 5,'APP_PROC_CODE' => 6,'APP_PARALLEL' => 7,'APP_INIT_USER' => 8,'APP_CUR_USER' => 9,'APP_CREATE_DATE' => 10,'APP_INIT_DATE' => 11,'APP_FINISH_DATE' => 12,'APP_UPDATE_DATE' => 13,'APP_DATA' => 14 ), BasePeer::TYPE_FIELDNAME => array('APP_UID' => 0, 'APP_NUMBER' => 1, 'APP_PARENT' => 2, 'APP_STATUS' => 3, 'PRO_UID' => 4, 'APP_PROC_STATUS' => 5, 'APP_PROC_CODE' => 6, 'APP_PARALLEL' => 7, 'APP_INIT_USER' => 8, 'APP_CUR_USER' => 9, 'APP_CREATE_DATE' => 10, 'APP_INIT_DATE' => 11, 'APP_FINISH_DATE' => 12, 'APP_UPDATE_DATE' => 13, 'APP_DATA' => 14
),BasePeer::TYPE_NUM => array (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 ), BasePeer::TYPE_NUM => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
) )
); );
@@ -172,10 +141,10 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function getMapBuilder () public static function getMapBuilder()
{ {
include_once 'classes/model/map/ApplicationMapBuilder.php'; include_once 'classes/model/map/ApplicationMapBuilder.php';
return BasePeer::getMapBuilder( 'classes.model.map.ApplicationMapBuilder' ); return BasePeer::getMapBuilder('classes.model.map.ApplicationMapBuilder');
} }
/** /**
@@ -186,12 +155,12 @@ require_once 'propel/util/BasePeer.php';
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
* @deprecated Use the getFieldNames() and translateFieldName() methods instead of this. * @deprecated Use the getFieldNames() and translateFieldName() methods instead of this.
*/ */
public static function getPhpNameMap () public static function getPhpNameMap()
{ {
if (self::$phpNameMap === null) { if (self::$phpNameMap === null) {
$map = ApplicationPeer::getTableMap(); $map = ApplicationPeer::getTableMap();
$columns = $map->getColumns(); $columns = $map->getColumns();
$nameMap = array (); $nameMap = array();
foreach ($columns as $column) { foreach ($columns as $column) {
$nameMap[$column->getPhpName()] = $column->getColumnName(); $nameMap[$column->getPhpName()] = $column->getColumnName();
} }
@@ -209,12 +178,12 @@ require_once 'propel/util/BasePeer.php';
* @param string $toType One of the class type constants * @param string $toType One of the class type constants
* @return string translated name of the field. * @return string translated name of the field.
*/ */
static public function translateFieldName ($name, $fromType, $toType) static public function translateFieldName($name, $fromType, $toType)
{ {
$toNames = self::getFieldNames( $toType ); $toNames = self::getFieldNames($toType);
$key = isset( self::$fieldKeys[$fromType][$name] ) ? self::$fieldKeys[$fromType][$name] : null; $key = isset(self::$fieldKeys[$fromType][$name]) ? self::$fieldKeys[$fromType][$name] : null;
if ($key === null) { if ($key === null) {
throw new PropelException( "'$name' could not be found in the field names of type '$fromType'. These are: " . print_r( self::$fieldKeys[$fromType], true ) ); throw new PropelException("'$name' could not be found in the field names of type '$fromType'. These are: " . print_r(self::$fieldKeys[$fromType], true));
} }
return $toNames[$key]; return $toNames[$key];
} }
@@ -228,10 +197,10 @@ require_once 'propel/util/BasePeer.php';
* @return array A list of field names * @return array A list of field names
*/ */
static public function getFieldNames ($type = BasePeer::TYPE_PHPNAME) static public function getFieldNames($type = BasePeer::TYPE_PHPNAME)
{ {
if (! array_key_exists( $type, self::$fieldNames )) { if (!array_key_exists($type, self::$fieldNames)) {
throw new PropelException( 'Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.' ); throw new PropelException('Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.');
} }
return self::$fieldNames[$type]; return self::$fieldNames[$type];
} }
@@ -249,9 +218,9 @@ require_once 'propel/util/BasePeer.php';
* @param string $column The column name for current table. (i.e. ApplicationPeer::COLUMN_NAME). * @param string $column The column name for current table. (i.e. ApplicationPeer::COLUMN_NAME).
* @return string * @return string
*/ */
public static function alias ($alias, $column) public static function alias($alias, $column)
{ {
return str_replace( ApplicationPeer::TABLE_NAME . '.', $alias . '.', $column ); return str_replace(ApplicationPeer::TABLE_NAME . '.', $alias . '.', $column);
} }
/** /**
@@ -265,7 +234,7 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function addSelectColumns (Criteria $criteria) public static function addSelectColumns(Criteria $criteria)
{ {
} }
@@ -282,7 +251,7 @@ require_once 'propel/util/BasePeer.php';
* @return int Number of matching rows. * @return int Number of matching rows.
* @todo Review declarated constant d'not used COUNT, COUNT_DISTINCT * @todo Review declarated constant d'not used COUNT, COUNT_DISTINCT
*/ */
public static function doCount (Criteria $criteria, $distinct = false, $con = null) public static function doCount(Criteria $criteria, $distinct = false, $con = null)
{ {
// we're going to modify criteria, so copy it first // we're going to modify criteria, so copy it first
$criteria = clone $criteria; $criteria = clone $criteria;
@@ -297,14 +266,14 @@ require_once 'propel/util/BasePeer.php';
$criteria->addSelectColumn(ApplicationPeer::COUNT); $criteria->addSelectColumn(ApplicationPeer::COUNT);
} }
*/ */
$criteria->addSelectColumn( 'COUNT(*)' ); $criteria->addSelectColumn('COUNT(*)');
// just in case we're grouping: add those columns to the select statement // just in case we're grouping: add those columns to the select statement
foreach ($criteria->getGroupByColumns() as $column) { foreach ($criteria->getGroupByColumns() as $column) {
$criteria->addSelectColumn( $column ); $criteria->addSelectColumn($column);
} }
$rs = ArrayBasePeer::doSelectRS( $criteria, $con ); $rs = ArrayBasePeer::doSelectRS($criteria, $con);
if ($rs->next()) { if ($rs->next()) {
$row = $rs->getRow(); $row = $rs->getRow();
return $row[1]; return $row[1];
@@ -323,11 +292,11 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function doSelectOne (Criteria $criteria, $con = null) public static function doSelectOne(Criteria $criteria, $con = null)
{ {
$critcopy = clone $criteria; $critcopy = clone $criteria;
$critcopy->setLimit( 1 ); $critcopy->setLimit(1);
$objects = ApplicationPeer::doSelect( $critcopy, $con ); $objects = ApplicationPeer::doSelect($critcopy, $con);
if ($objects) { if ($objects) {
return $objects[0]; return $objects[0];
} }
@@ -343,18 +312,18 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
private function createSelectSql ($criteria, $tableName, &$params) private function createSelectSql($criteria, $tableName, &$params)
{ {
$db = Propel::getDB( $criteria->getDbName() ); $db = Propel::getDB($criteria->getDbName());
// redundant definition $selectModifiers = array(); // redundant definition $selectModifiers = array();
$selectClause = array (); $selectClause = array();
$fromClause = array (); $fromClause = array();
$joinClause = array (); $joinClause = array();
$joinTables = array (); $joinTables = array();
$whereClause = array (); $whereClause = array();
$orderByClause = array (); $orderByClause = array();
$groupByClause = array (); $groupByClause = array();
$orderBy = $criteria->getOrderByColumns(); $orderBy = $criteria->getOrderByColumns();
$groupBy = $criteria->getGroupByColumns(); $groupBy = $criteria->getGroupByColumns();
@@ -372,8 +341,8 @@ require_once 'propel/util/BasePeer.php';
$selectClause[] = $columnName; // the full column name: e.g. MAX(books.price) $selectClause[] = $columnName; // the full column name: e.g. MAX(books.price)
$parenPos = strpos( $columnName, '(' ); $parenPos = strpos($columnName, '(');
$dotPos = strpos( $columnName, '.' ); $dotPos = strpos($columnName, '.');
// [HL] I think we really only want to worry about adding stuff to // [HL] I think we really only want to worry about adding stuff to
// the fromClause if this function has a TABLE.COLUMN in it at all. // the fromClause if this function has a TABLE.COLUMN in it at all.
@@ -382,18 +351,18 @@ require_once 'propel/util/BasePeer.php';
if ($dotPos !== false) { if ($dotPos !== false) {
if ($parenPos === false) { // table.column if ($parenPos === false) { // table.column
$tableName = substr( $columnName, 0, $dotPos ); $tableName = substr($columnName, 0, $dotPos);
} else { // FUNC(table.column) } else { // FUNC(table.column)
$tableName = substr( $columnName, $parenPos + 1, $dotPos - ($parenPos + 1) ); $tableName = substr($columnName, $parenPos + 1, $dotPos - ($parenPos + 1));
// functions may contain qualifiers so only take the last // functions may contain qualifiers so only take the last
// word as the table name. // word as the table name.
// COUNT(DISTINCT books.price) // COUNT(DISTINCT books.price)
$lastSpace = strpos( $tableName, ' ' ); $lastSpace = strpos($tableName, ' ');
if ($lastSpace !== false) { // COUNT(DISTINCT books.price) if ($lastSpace !== false) { // COUNT(DISTINCT books.price)
$tableName = substr( $tableName, $lastSpace + 1 ); $tableName = substr($tableName, $lastSpace + 1);
} }
} }
$tableName2 = $criteria->getTableForAlias( $tableName ); $tableName2 = $criteria->getTableForAlias($tableName);
if ($tableName2 !== null) { if ($tableName2 !== null) {
$fromClause[] = $tableName2 . ' ' . $tableName; $fromClause[] = $tableName2 . ' ' . $tableName;
} else { } else {
@@ -411,13 +380,13 @@ require_once 'propel/util/BasePeer.php';
// add the criteria to WHERE clause // add the criteria to WHERE clause
foreach ($criteria->keys() as $key) { foreach ($criteria->keys() as $key) {
$criterion = $criteria->getCriterion( $key ); $criterion = $criteria->getCriterion($key);
$someCriteria = $criterion->getAttachedCriterion(); $someCriteria = $criterion->getAttachedCriterion();
$someCriteriaLength = count( $someCriteria ); $someCriteriaLength = count($someCriteria);
$table = null; $table = null;
for ($i = 0; $i < $someCriteriaLength; $i ++) { for ($i = 0; $i < $someCriteriaLength; $i++) {
$tableName = $someCriteria[$i]->getTable(); $tableName = $someCriteria[$i]->getTable();
$table = $criteria->getTableForAlias( $tableName ); $table = $criteria->getTableForAlias($tableName);
if ($table !== null) { if ($table !== null) {
$fromClause[] = $table . ' ' . $tableName; $fromClause[] = $table . ' ' . $tableName;
} else { } else {
@@ -425,11 +394,11 @@ require_once 'propel/util/BasePeer.php';
$table = $tableName; $table = $tableName;
} }
$ignoreCase = (($criteria->isIgnoreCase() || $someCriteria[$i]->isIgnoreCase()) && ($dbMap->getTable( $table )->getColumn( $someCriteria[$i]->getColumn() )->getType() == "string")); $ignoreCase = (($criteria->isIgnoreCase() || $someCriteria[$i]->isIgnoreCase()) && ($dbMap->getTable($table)->getColumn($someCriteria[$i]->getColumn())->getType() == "string"));
$someCriteria[$i]->setIgnoreCase( $ignoreCase ); $someCriteria[$i]->setIgnoreCase($ignoreCase);
} }
$criterion->setDB( $db ); $criterion->setDB($db);
$cri['table'] = $criterion->table; $cri['table'] = $criterion->table;
$cri['field'] = $criterion->column; $cri['field'] = $criterion->column;
@@ -445,41 +414,41 @@ require_once 'propel/util/BasePeer.php';
} }
// Unique from clause elements // Unique from clause elements
$fromClause = array_unique( $fromClause ); $fromClause = array_unique($fromClause);
if (! empty( $orderBy )) { if (!empty($orderBy)) {
foreach ($orderBy as $orderByColumn) { foreach ($orderBy as $orderByColumn) {
// Add function expression as-is. // Add function expression as-is.
if (strpos( $orderByColumn, '(' ) !== false) { if (strpos($orderByColumn, '(') !== false) {
$orderByClause[] = $orderByColumn; $orderByClause[] = $orderByColumn;
continue; continue;
} }
// Split orderByColumn (i.e. "table.column DESC") // Split orderByColumn (i.e. "table.column DESC")
$dotPos = strpos( $orderByColumn, '.' ); $dotPos = strpos($orderByColumn, '.');
if ($dotPos !== false) { if ($dotPos !== false) {
$tableName = substr( $orderByColumn, 0, $dotPos ); $tableName = substr($orderByColumn, 0, $dotPos);
$columnName = substr( $orderByColumn, $dotPos + 1 ); $columnName = substr($orderByColumn, $dotPos + 1);
} else { } else {
$tableName = ''; $tableName = '';
$columnName = $orderByColumn; $columnName = $orderByColumn;
} }
$spacePos = strpos( $columnName, ' ' ); $spacePos = strpos($columnName, ' ');
if ($spacePos !== false) { if ($spacePos !== false) {
$direction = substr( $columnName, $spacePos ); $direction = substr($columnName, $spacePos);
$columnName = substr( $columnName, 0, $spacePos ); $columnName = substr($columnName, 0, $spacePos);
} else { } else {
$direction = ''; $direction = '';
} }
$orderByClause[] = array ('columnName' => $columnName,'direction' => $direction $orderByClause[] = array('columnName' => $columnName, 'direction' => $direction
); );
} }
} }
// Build the SQL from the arrays we compiled // Build the SQL from the arrays we compiled
$sql = "SELECT " . ($selectModifiers ? implode( " ", $selectModifiers ) . " " : "") . implode( ", ", $selectClause ) . " FROM " . $fromClause[0] . ($whereClause ? " WHERE " . implode( " AND ", $whereClause ) : "") . ($groupByClause ? " GROUP BY " . implode( ",", $groupByClause ) : ""); $sql = "SELECT " . ($selectModifiers ? implode(" ", $selectModifiers) . " " : "") . implode(", ", $selectClause) . " FROM " . $fromClause[0] . ($whereClause ? " WHERE " . implode(" AND ", $whereClause) : "") . ($groupByClause ? " GROUP BY " . implode(",", $groupByClause) : "");
$dataSql['selectClause'] = $selectClause; $dataSql['selectClause'] = $selectClause;
$dataSql['fromClause'] = $fromClause; $dataSql['fromClause'] = $fromClause;
@@ -499,27 +468,27 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function doSelect (Criteria $criteria, $tableName, $con = null) public static function doSelect(Criteria $criteria, $tableName, $con = null)
{ {
$dbMap = Propel::getDatabaseMap( $criteria->getDbName() ); $dbMap = Propel::getDatabaseMap($criteria->getDbName());
$stmt = null; $stmt = null;
try { try {
$params = array (); $params = array();
$sql = self::createSelectSql( $criteria, $tableName, $params ); $sql = self::createSelectSql($criteria, $tableName, $params);
$sql['params'] = $params; $sql['params'] = $params;
$stmt = $con->prepareStatement( $sql ); $stmt = $con->prepareStatement($sql);
//$stmt->setLimit($criteria->getLimit()); //$stmt->setLimit($criteria->getLimit());
$sql['limit'] = $criteria->getLimit(); $sql['limit'] = $criteria->getLimit();
//$stmt->setOffset($criteria->getOffset()); //$stmt->setOffset($criteria->getOffset());
$sql['offset'] = $criteria->getOffset(); $sql['offset'] = $criteria->getOffset();
//$rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM); //$rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM);
$rs = $con->executeQuery( $sql, ResultSet::FETCHMODE_NUM ); $rs = $con->executeQuery($sql, ResultSet::FETCHMODE_NUM);
} catch (Exception $e) { } catch (Exception $e) {
if ($stmt) if ($stmt)
$stmt->close(); $stmt->close();
throw new PropelException( $e ); throw new PropelException($e);
} }
return $rs; return $rs;
@@ -539,34 +508,34 @@ require_once 'propel/util/BasePeer.php';
* @return ResultSet The resultset object with numerically-indexed fields. * @return ResultSet The resultset object with numerically-indexed fields.
* @see BasePeer::doSelect() * @see BasePeer::doSelect()
*/ */
public static function doSelectRS (Criteria $criteria, $con = null) public static function doSelectRS(Criteria $criteria, $con = null)
{ {
global $_DBArray; global $_DBArray;
if (! isset( $_DBArray )) { if (!isset($_DBArray)) {
$_DBArray = $_SESSION['_DBArray']; $_DBArray = $_SESSION['_DBArray'];
} }
$tableName = $criteria->getDBArrayTable(); $tableName = $criteria->getDBArrayTable();
if (! isset( $_DBArray[$tableName] )) { if (!isset($_DBArray[$tableName])) {
throw new Exception( "Error: the table '$tableName' doesn't exist in DBArray " ); throw new Exception("Error: the table '$tableName' doesn't exist in DBArray ");
} }
$arrayTable = $_DBArray[$tableName]; $arrayTable = $_DBArray[$tableName];
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( self::DATABASE_NAME ); $con = Propel::getConnection(self::DATABASE_NAME);
} }
if (! $criteria->getSelectColumns()) { if (!$criteria->getSelectColumns()) {
foreach (array_keys( $_DBArray[$tableName][0] ) as $key => $val) foreach (array_keys($_DBArray[$tableName][0]) as $key => $val)
$criteria->addSelectColumn( $tableName . '.' . $val ); $criteria->addSelectColumn($tableName . '.' . $val);
} }
// Set the correct dbName // Set the correct dbName
$criteria->setDbName( self::DATABASE_NAME ); $criteria->setDbName(self::DATABASE_NAME);
// BasePeer returns a Creole ResultSet, set to return // BasePeer returns a Creole ResultSet, set to return
// rows indexed numerically. // rows indexed numerically.
return ArrayBasePeer::doSelect( $criteria, $tableName, $con ); return ArrayBasePeer::doSelect($criteria, $tableName, $con);
} }
/** /**
@@ -576,17 +545,17 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function populateObjects (ResultSet $rs) public static function populateObjects(ResultSet $rs)
{ {
$results = array (); $results = array();
// set the class once to avoid overhead in the loop // set the class once to avoid overhead in the loop
$cls = ApplicationPeer::getOMClass(); $cls = ApplicationPeer::getOMClass();
$cls = Propel::import( $cls ); $cls = Propel::import($cls);
// populate the object(s) // populate the object(s)
while ($rs->next()) { while ($rs->next()) {
$obj = new $cls(); $obj = new $cls();
$obj->hydrate( $rs ); $obj->hydrate($rs);
$results[] = $obj; $results[] = $obj;
} }
return $results; return $results;
@@ -600,9 +569,9 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function getTableMap () public static function getTableMap()
{ {
return Propel::getDatabaseMap( self::DATABASE_NAME )->getTable( self::TABLE_NAME ); return Propel::getDatabaseMap(self::DATABASE_NAME)->getTable(self::TABLE_NAME);
} }
/** /**
@@ -614,7 +583,7 @@ require_once 'propel/util/BasePeer.php';
* *
* @return string path.to.ClassName * @return string path.to.ClassName
*/ */
public static function getOMClass () public static function getOMClass()
{ {
return ApplicationPeer::CLASS_DEFAULT; return ApplicationPeer::CLASS_DEFAULT;
} }
@@ -628,10 +597,10 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function doInsert ($values, $con = null) public static function doInsert($values, $con = null)
{ {
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( self::DATABASE_NAME ); $con = Propel::getConnection(self::DATABASE_NAME);
} }
if ($values instanceof Criteria) { if ($values instanceof Criteria) {
@@ -641,13 +610,13 @@ require_once 'propel/util/BasePeer.php';
} }
// Set the correct dbName // Set the correct dbName
$criteria->setDbName( self::DATABASE_NAME ); $criteria->setDbName(self::DATABASE_NAME);
try { try {
// use transaction because $criteria could contain info // use transaction because $criteria could contain info
// for more than one table (I guess, conceivably) // for more than one table (I guess, conceivably)
$con->begin(); $con->begin();
$pk = BasePeer::doInsert( $criteria, $con ); $pk = BasePeer::doInsert($criteria, $con);
$con->commit(); $con->commit();
} catch (PropelException $e) { } catch (PropelException $e) {
$con->rollback(); $con->rollback();
@@ -666,20 +635,20 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function doUpdate ($values, $con = null) public static function doUpdate($values, $con = null)
{ {
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( self::DATABASE_NAME ); $con = Propel::getConnection(self::DATABASE_NAME);
} }
$selectCriteria = new Criteria( self::DATABASE_NAME ); $selectCriteria = new Criteria(self::DATABASE_NAME);
if ($values instanceof Criteria) { if ($values instanceof Criteria) {
$criteria = clone $values; // rename for clarity $criteria = clone $values; // rename for clarity
$comparison = $criteria->getComparison( ApplicationPeer::APP_UID ); $comparison = $criteria->getComparison(ApplicationPeer::APP_UID);
$selectCriteria->add( ApplicationPeer::APP_UID, $criteria->remove( ApplicationPeer::APP_UID ), $comparison ); $selectCriteria->add(ApplicationPeer::APP_UID, $criteria->remove(ApplicationPeer::APP_UID), $comparison);
} else { // $values is Application object } else { // $values is Application object
$criteria = $values->buildCriteria(); // gets full criteria $criteria = $values->buildCriteria(); // gets full criteria
@@ -687,9 +656,9 @@ require_once 'propel/util/BasePeer.php';
} }
// set the correct dbName // set the correct dbName
$criteria->setDbName( self::DATABASE_NAME ); $criteria->setDbName(self::DATABASE_NAME);
return BasePeer::doUpdate( $selectCriteria, $criteria, $con ); return BasePeer::doUpdate($selectCriteria, $criteria, $con);
} }
/** /**
@@ -698,17 +667,17 @@ require_once 'propel/util/BasePeer.php';
* @param Connection $con The connection to use * @param Connection $con The connection to use
* @return int The number of affected rows (if supported by underlying database driver). * @return int The number of affected rows (if supported by underlying database driver).
*/ */
public static function doDeleteAll ($con = null) public static function doDeleteAll($con = null)
{ {
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( self::DATABASE_NAME ); $con = Propel::getConnection(self::DATABASE_NAME);
} }
$affectedRows = 0; // initialize var to track total num of affected rows $affectedRows = 0; // initialize var to track total num of affected rows
try { try {
// use transaction because $criteria could contain info // use transaction because $criteria could contain info
// for more than one table or we could emulating ON DELETE CASCADE, etc. // for more than one table or we could emulating ON DELETE CASCADE, etc.
$con->begin(); $con->begin();
$affectedRows += BasePeer::doDeleteAll( ApplicationPeer::TABLE_NAME, $con ); $affectedRows += BasePeer::doDeleteAll(ApplicationPeer::TABLE_NAME, $con);
$con->commit(); $con->commit();
return $affectedRows; return $affectedRows;
} catch (PropelException $e) { } catch (PropelException $e) {
@@ -728,10 +697,10 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function doDelete ($values, $con = null) public static function doDelete($values, $con = null)
{ {
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( ApplicationPeer::DATABASE_NAME ); $con = Propel::getConnection(ApplicationPeer::DATABASE_NAME);
} }
if ($values instanceof Criteria) { if ($values instanceof Criteria) {
@@ -741,12 +710,12 @@ require_once 'propel/util/BasePeer.php';
$criteria = $values->buildPkeyCriteria(); $criteria = $values->buildPkeyCriteria();
} else { } else {
// it must be the primary key // it must be the primary key
$criteria = new Criteria( self::DATABASE_NAME ); $criteria = new Criteria(self::DATABASE_NAME);
$criteria->add( ApplicationPeer::APP_UID, (array) $values, Criteria::IN ); $criteria->add(ApplicationPeer::APP_UID, (array)$values, Criteria::IN);
} }
} }
// Set the correct dbName // Set the correct dbName
$criteria->setDbName( self::DATABASE_NAME ); $criteria->setDbName(self::DATABASE_NAME);
$affectedRows = 0; // initialize var to track total num of affected rows $affectedRows = 0; // initialize var to track total num of affected rows
@@ -756,7 +725,7 @@ require_once 'propel/util/BasePeer.php';
// for more than one table or we could emulating ON DELETE CASCADE, etc. // for more than one table or we could emulating ON DELETE CASCADE, etc.
$con->begin(); $con->begin();
$affectedRows += BasePeer::doDelete( $criteria, $con ); $affectedRows += BasePeer::doDelete($criteria, $con);
$con->commit(); $con->commit();
return $affectedRows; return $affectedRows;
} catch (PropelException $e) { } catch (PropelException $e) {
@@ -777,33 +746,33 @@ require_once 'propel/util/BasePeer.php';
* *
* @return mixed TRUE if all columns are valid or the error message of the first invalid column. * @return mixed TRUE if all columns are valid or the error message of the first invalid column.
*/ */
public static function doValidate (Application $obj, $cols = null) public static function doValidate(Application $obj, $cols = null)
{ {
$columns = array (); $columns = array();
if ($cols) { if ($cols) {
$dbMap = Propel::getDatabaseMap( ApplicationPeer::DATABASE_NAME ); $dbMap = Propel::getDatabaseMap(ApplicationPeer::DATABASE_NAME);
$tableMap = $dbMap->getTable( ApplicationPeer::TABLE_NAME ); $tableMap = $dbMap->getTable(ApplicationPeer::TABLE_NAME);
if (! is_array( $cols )) { if (!is_array($cols)) {
$cols = array ($cols $cols = array($cols
); );
} }
foreach ($cols as $colName) { foreach ($cols as $colName) {
if ($tableMap->containsColumn( $colName )) { if ($tableMap->containsColumn($colName)) {
$get = 'get' . $tableMap->getColumn( $colName )->getPhpName(); $get = 'get' . $tableMap->getColumn($colName)->getPhpName();
$columns[$colName] = $obj->$get(); $columns[$colName] = $obj->$get();
} }
} }
} else { } else {
if ($obj->isNew() || $obj->isColumnModified( ApplicationPeer::APP_STATUS )) if ($obj->isNew() || $obj->isColumnModified(ApplicationPeer::APP_STATUS))
$columns[ApplicationPeer::APP_STATUS] = $obj->getAppStatus(); $columns[ApplicationPeer::APP_STATUS] = $obj->getAppStatus();
} }
return BasePeer::doValidate( ApplicationPeer::DATABASE_NAME, ApplicationPeer::TABLE_NAME, $columns ); return BasePeer::doValidate(ApplicationPeer::DATABASE_NAME, ApplicationPeer::TABLE_NAME, $columns);
} }
/** /**
@@ -813,19 +782,19 @@ require_once 'propel/util/BasePeer.php';
* @param Connection $con the connection to use * @param Connection $con the connection to use
* @return Application * @return Application
*/ */
public static function retrieveByPK ($pk, $con = null) public static function retrieveByPK($pk, $con = null)
{ {
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( self::DATABASE_NAME ); $con = Propel::getConnection(self::DATABASE_NAME);
} }
$criteria = new Criteria( ApplicationPeer::DATABASE_NAME ); $criteria = new Criteria(ApplicationPeer::DATABASE_NAME);
$criteria->add( ApplicationPeer::APP_UID, $pk ); $criteria->add(ApplicationPeer::APP_UID, $pk);
$v = ApplicationPeer::doSelect( $criteria, $con ); $v = ApplicationPeer::doSelect($criteria, $con);
return ! empty( $v ) > 0 ? $v[0] : null; return !empty($v) > 0 ? $v[0] : null;
} }
/** /**
@@ -836,19 +805,19 @@ require_once 'propel/util/BasePeer.php';
* @throws PropelException Any exceptions caught during processing will be * @throws PropelException Any exceptions caught during processing will be
* rethrown wrapped into a PropelException. * rethrown wrapped into a PropelException.
*/ */
public static function retrieveByPKs ($pks, $con = null) public static function retrieveByPKs($pks, $con = null)
{ {
if ($con === null) { if ($con === null) {
$con = Propel::getConnection( self::DATABASE_NAME ); $con = Propel::getConnection(self::DATABASE_NAME);
} }
$objs = null; $objs = null;
if (empty( $pks )) { if (empty($pks)) {
$objs = array (); $objs = array();
} else { } else {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->add( ApplicationPeer::APP_UID, $pks, Criteria::IN ); $criteria->add(ApplicationPeer::APP_UID, $pks, Criteria::IN);
$objs = ApplicationPeer::doSelect( $criteria, $con ); $objs = ApplicationPeer::doSelect($criteria, $con);
} }
return $objs; return $objs;
} }

View File

@@ -0,0 +1,643 @@
<?php
/**
* Interface to the Solr Search server
* @author Herbert Saal Gutierrez
*
*/
class BpmnEngineSearchIndexAccessSolr
{
const SOLR_VERSION = '&version=2.2';
private $_solrIsEnabled = false;
private $_solrHost = "";
public function __construct($solrIsEnabled = false, $solrHost = "")
{
// use the parameters to initialize class
$this->_solrIsEnabled = $solrIsEnabled;
$this->_solrHost = $solrHost;
}
/**
* Verify if the Solr service is available
* @gearman = false
* @rest = false
* @background = false
*
* @return bool
*/
public function isEnabled($workspace)
{
$resultServerStatus = false;
//if($this->_solrIsEnabled != true)
//return $resultServerStatus;
// verify solr server response
try {
$resultServerStatus = $this->ping($workspace);
} catch (Exception $ex) {
$resultServerStatus = false;
}
return $resultServerStatus;
}
/**
* Returns the total number of indexed documents
* @gearman = false
* @rest = false
* @background = false
*
* @param
* workspace: workspace name
* @return total
*/
public function getNumberDocuments($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
// get configuration information in base to workspace parameter
// get total number of documents in registry
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/select/?q=*:*";
$solrIntruct .= self::SOLR_VERSION;
$solrIntruct .= "&start=0&rows=0&echoParams=none&wt=json";
$handlerTotal = curl_init($solrIntruct);
curl_setopt($handlerTotal, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handlerTotal, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handlerTotal, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handlerTotal, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handlerTotal, CURLOPT_HTTPHEADER, array('Expect:'));
}
$responseTotal = curl_exec($handlerTotal);
curl_close($handlerTotal);
// verify the result of solr
$responseSolrTotal = G::json_decode($responseTotal);
if ($responseSolrTotal->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error returning the total number of documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
$numTotalDocs = $responseSolrTotal->response->numFound;
return $numTotalDocs;
}
/**
* Execute a query in base to Requested data
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function executeQuery($solrRequestData)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$workspace = $solrRequestData->workspace;
// format request
$query = empty ($solrRequestData->searchText) ? '*:*' : $solrRequestData->searchText;
$query = rawurlencode($query);
$start = '&start=' . $solrRequestData->startAfter;
$rows = '&rows=' . $solrRequestData->pageSize;
$fieldList = '';
$cols = $solrRequestData->includeCols;
if (!empty ($cols)) {
$fieldList = "&fl=" . implode(",", $cols);
}
$sort = '';
if ($solrRequestData->numSortingCols > 0) {
$sort = '&sort=';
for ($i = 0; $i < $solrRequestData->numSortingCols; $i++) {
$sort .= $solrRequestData->sortCols [$i] . "%20" . $solrRequestData->sortDir [$i] . ",";
}
$sort = substr_replace($sort, "", -1);
}
$resultFormat = empty ($solrRequestData->resultFormat) ? '' : '&wt=' . $solrRequestData->resultFormat;
$filters = '';
$aFilters = explode(',', $solrRequestData->filterText);
foreach ($aFilters as $value) {
$filters .= '&fq=' . urlencode($value);
}
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/select/?q=$query";
$solrIntruct .= "&echoParams=none";
$solrIntruct .= self::SOLR_VERSION;
$solrIntruct .= $start;
$solrIntruct .= $rows;
$solrIntruct .= $fieldList;
$solrIntruct .= $sort;
$solrIntruct .= $filters;
$solrIntruct .= $resultFormat;
// send query
// search the cases in base to datatable parameters
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error executing query to Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
/**
* Insert or Update document index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function updateDocument($solrUpdateDocument)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $solrUpdateDocument->workspace;
$solrIntruct .= "/update";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
)); // -H
curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, $solrUpdateDocument->document); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
$swOk = strpos($response, '<int name="status">0</int>');
if (!$swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error updating document in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Commit the changes since the last commit
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function commitChanges($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
)); // -H
curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "<commit/>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
$swOk = strpos($response, '<int name="status">0</int>');
if (!$swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error commiting changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Rollback the changes since the last commit
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function rollbackChanges($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
)); // -H
curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "<rollback/>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
$swOk = strpos($response, '<int name="status">0</int>');
if (!$swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error rolling back changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Optimize Solr index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function optimizeChanges($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
)); // -H
curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "<optimize/>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
$swOk = strpos($response, '<int name="status">0</int>');
if (!$swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error optimizing changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Return the list of the stored fields in Solr
*
* @param string $workspace
* Solr instance name
* @throws Exception
* @return void mixed of field names
*/
public function getListIndexedStoredFields($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/admin/luke?numTerms=0&wt=json";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error getting index fields in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
/**
* Ping the Solr Server to check his health
*
* @param string $workspace
* Solr instance name
* @throws Exception
* @return void mixed of field names
*/
public function ping($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/admin/ping?wt=json";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($handler);
curl_close($handler);
//there's no response
if (!$response)
return false;
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != "OK") {
throw new Exception (date('Y-m-d H:i:s:u') . " Error pinging Solr server." . $solrIntruct . " response error: " . $response . "\n");
}
return true;
}
/**
* Delete all documents from index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function deleteAllDocuments($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
// $registry = Zend_Registry::getInstance();
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
)); // -H
curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "<delete><query>*:*</query></delete>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
$swOk = strpos($response, '<int name="status">0</int>');
if (!$swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error deleting all documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Delete specified documents from index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function deleteDocument($workspace, $idQuery)
{
//if (! $this->_solrIsEnabled)
//return;
// $registry = Zend_Registry::getInstance();
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
)); // -H
curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "<delete><query>" . $idQuery . "</query></delete>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
$swOk = strpos($response, '<int name="status">0</int>');
if (!$swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error deleting document in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Execute a query in base to Request data
*
* @param Entity_FacetRequest $facetRequestEntity
* @return solr response: list of facets array
*/
public function getFacetsList($facetRequest)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$workspace = $facetRequest->workspace;
// format request
$query = empty ($facetRequest->searchText) ? '*:*' : $facetRequest->searchText;
$query = rawurlencode($query);
$start = '&start=0';
$rows = '&rows=0';
$facets = '&facet=on&facet.mincount=1&facet.limit=20'; // enable facet and
// only return facets
// with minimun one
// instance
foreach ($facetRequest->facetFields as $value) {
$facets .= '&facet.field=' . $value;
}
foreach ($facetRequest->facetQueries as $value) {
$facets .= '&facet.query=' . $value;
}
if (!empty ($facetRequest->facetDates)) {
foreach ($facetRequest->facetDates as $value) {
$facets .= '&facet.date=' . $value;
}
$facets .= '&facet.date.start=' . $facetRequest->facetDatesStart;
$facets .= '&facet.date.end=' . $facetRequest->facetDatesEnd;
$facets .= '&facet.date.gap=' . $facetRequest->facetDateGap;
}
$filters = '';
foreach ($facetRequest->filters as $value) {
$filters .= '&fq=' . $value;
}
// echo "<pre>";
$resultFormat = '&wt=json';
$solrIntruct = (substr($this->_solrHost, -1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/select/?q=$query";
$solrIntruct .= "&echoParams=none";
$solrIntruct .= self::SOLR_VERSION;
$solrIntruct .= $start;
$solrIntruct .= $rows;
$solrIntruct .= $facets;
$solrIntruct .= $filters;
$solrIntruct .= $resultFormat;
// send query
// search the cases in base to datatable parameters
$handler = curl_init($solrIntruct);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec($handler);
curl_close($handler);
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error getting faceted list from Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
}

View File

@@ -1,671 +0,0 @@
<?php
/**
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2012 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 5304 Ventura Drive,
* Delray Beach, FL, 33484, USA, or email info@colosa.com.
*
*/
/**
* Interface to the Solr Search server
* @author Herbert Saal Gutierrez
*
*/
/**
* Interface to the Solr Search server
* @author Herbert Saal Gutierrez
*
*/class BpmnEngine_SearchIndexAccess_Solr
{
const SOLR_VERSION = '&version=2.2';
private $_solrIsEnabled = false;
private $_solrHost = "";
public function __construct($solrIsEnabled = false, $solrHost = "")
{
// use the parameters to initialize class
$this->_solrIsEnabled = $solrIsEnabled;
$this->_solrHost = $solrHost;
}
/**
* Verify if the Solr service is available
* @gearman = false
* @rest = false
* @background = false
*
* @return bool
*/
public function isEnabled($workspace)
{
$resultServerStatus = false;
//if($this->_solrIsEnabled != true)
//return $resultServerStatus;
// verify solr server response
try{
$resultServerStatus = $this->ping($workspace);
}catch(Exception $ex){
$resultServerStatus = false;
}
return $resultServerStatus;
}
/**
* Returns the total number of indexed documents
* @gearman = false
* @rest = false
* @background = false
*
* @param
* workspace: workspace name
* @return total
*/
public function getNumberDocuments($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
// get configuration information in base to workspace parameter
// get total number of documents in registry
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/select/?q=*:*";
$solrIntruct .= self::SOLR_VERSION;
$solrIntruct .= "&start=0&rows=0&echoParams=none&wt=json";
$handlerTotal = curl_init ($solrIntruct);
curl_setopt ($handlerTotal, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handlerTotal, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handlerTotal, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handlerTotal, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handlerTotal, CURLOPT_HTTPHEADER, array('Expect:'));
}
$responseTotal = curl_exec ($handlerTotal);
curl_close ($handlerTotal);
// verify the result of solr
$responseSolrTotal = G::json_decode ($responseTotal);
if ($responseSolrTotal->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error returning the total number of documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
$numTotalDocs = $responseSolrTotal->response->numFound;
return $numTotalDocs;
}
/**
* Execute a query in base to Requested data
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function executeQuery($solrRequestData)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$workspace = $solrRequestData->workspace;
// format request
$query = empty ($solrRequestData->searchText) ? '*:*' : $solrRequestData->searchText;
$query = rawurlencode ($query);
$start = '&start=' . $solrRequestData->startAfter;
$rows = '&rows=' . $solrRequestData->pageSize;
$fieldList = '';
$cols = $solrRequestData->includeCols;
if (! empty ($cols)) {
$fieldList = "&fl=" . implode (",", $cols);
}
$sort = '';
if ($solrRequestData->numSortingCols > 0) {
$sort = '&sort=';
for ($i = 0; $i < $solrRequestData->numSortingCols; $i ++) {
$sort .= $solrRequestData->sortCols [$i] . "%20" . $solrRequestData->sortDir [$i] . ",";
}
$sort = substr_replace ($sort, "", - 1);
}
$resultFormat = empty ($solrRequestData->resultFormat) ? '' : '&wt=' . $solrRequestData->resultFormat;
$filters = '';
$aFilters = explode (',', $solrRequestData->filterText);
foreach ($aFilters as $value) {
$filters .= '&fq=' . urlencode ($value);
}
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/select/?q=$query";
$solrIntruct .= "&echoParams=none";
$solrIntruct .= self::SOLR_VERSION;
$solrIntruct .= $start;
$solrIntruct .= $rows;
$solrIntruct .= $fieldList;
$solrIntruct .= $sort;
$solrIntruct .= $filters;
$solrIntruct .= $resultFormat;
// send query
// search the cases in base to datatable parameters
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
// decode
$responseSolr = G::json_decode ($response);
if ($responseSolr->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error executing query to Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
/**
* Insert or Update document index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function updateDocument($solrUpdateDocument)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $solrUpdateDocument->workspace;
$solrIntruct .= "/update";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($handler, CURLOPT_HTTPHEADER, array (
'Content-type:application/xml'
)); // -H
curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt ($handler, CURLOPT_POSTFIELDS, $solrUpdateDocument->document); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
$swOk = strpos ($response, '<int name="status">0</int>');
if (! $swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error updating document in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Commit the changes since the last commit
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function commitChanges($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($handler, CURLOPT_HTTPHEADER, array (
'Content-type:application/xml'
)); // -H
curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt ($handler, CURLOPT_POSTFIELDS, "<commit/>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
$swOk = strpos ($response, '<int name="status">0</int>');
if (! $swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error commiting changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Rollback the changes since the last commit
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function rollbackChanges($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($handler, CURLOPT_HTTPHEADER, array (
'Content-type:application/xml'
)); // -H
curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt ($handler, CURLOPT_POSTFIELDS, "<rollback/>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
$swOk = strpos ($response, '<int name="status">0</int>');
if (! $swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error rolling back changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Optimize Solr index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function optimizeChanges($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($handler, CURLOPT_HTTPHEADER, array (
'Content-type:application/xml'
)); // -H
curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt ($handler, CURLOPT_POSTFIELDS, "<optimize/>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
$swOk = strpos ($response, '<int name="status">0</int>');
if (! $swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error optimizing changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Return the list of the stored fields in Solr
*
* @param string $workspace
* Solr instance name
* @throws Exception
* @return void mixed of field names
*/
public function getListIndexedStoredFields($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/admin/luke?numTerms=0&wt=json";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
// decode
$responseSolr = G::json_decode ($response);
if ($responseSolr->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error getting index fields in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
/**
* Ping the Solr Server to check his health
*
* @param string $workspace
* Solr instance name
* @throws Exception
* @return void mixed of field names
*/
public function ping($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/admin/ping?wt=json";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec ($handler);
curl_close ($handler);
//there's no response
if(!$response)
return false;
// decode
$responseSolr = G::json_decode ($response);
if ($responseSolr->responseHeader->status != "OK") {
throw new Exception (date('Y-m-d H:i:s:u') . " Error pinging Solr server." . $solrIntruct . " response error: " . $response . "\n");
}
return true;
}
/**
* Delete all documents from index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function deleteAllDocuments($workspace)
{
//if (! $this->_solrIsEnabled)
//return;
// $registry = Zend_Registry::getInstance();
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($handler, CURLOPT_HTTPHEADER, array (
'Content-type:application/xml'
)); // -H
curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt ($handler, CURLOPT_POSTFIELDS, "<delete><query>*:*</query></delete>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
$swOk = strpos ($response, '<int name="status">0</int>');
if (! $swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error deleting all documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Delete specified documents from index
* @gearman = false
* @rest = false
* @background = false
*
* @return solr response
*/
public function deleteDocument($workspace, $idQuery)
{
//if (! $this->_solrIsEnabled)
//return;
// $registry = Zend_Registry::getInstance();
$solrIntruct = '';
// get configuration information in base to workspace parameter
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/update";
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($handler, CURLOPT_HTTPHEADER, array (
'Content-type:application/xml'
)); // -H
curl_setopt ($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt ($handler, CURLOPT_POSTFIELDS, "<delete><query>" . $idQuery . "</query></delete>"); // data
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
$swOk = strpos ($response, '<int name="status">0</int>');
if (! $swOk) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error deleting document in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Execute a query in base to Request data
*
* @param Entity_FacetRequest $facetRequestEntity
* @return solr response: list of facets array
*/
public function getFacetsList($facetRequest)
{
//if (! $this->_solrIsEnabled)
//return;
$solrIntruct = '';
// get configuration information in base to workspace parameter
$workspace = $facetRequest->workspace;
// format request
$query = empty ($facetRequest->searchText) ? '*:*' : $facetRequest->searchText;
$query = rawurlencode ($query);
$start = '&start=0';
$rows = '&rows=0';
$facets = '&facet=on&facet.mincount=1&facet.limit=20'; // enable facet and
// only return facets
// with minimun one
// instance
foreach ($facetRequest->facetFields as $value) {
$facets .= '&facet.field=' . $value;
}
foreach ($facetRequest->facetQueries as $value) {
$facets .= '&facet.query=' . $value;
}
if (! empty ($facetRequest->facetDates)) {
foreach ($facetRequest->facetDates as $value) {
$facets .= '&facet.date=' . $value;
}
$facets .= '&facet.date.start=' . $facetRequest->facetDatesStart;
$facets .= '&facet.date.end=' . $facetRequest->facetDatesEnd;
$facets .= '&facet.date.gap=' . $facetRequest->facetDateGap;
}
$filters = '';
foreach ($facetRequest->filters as $value) {
$filters .= '&fq=' . $value;
}
// echo "<pre>";
$resultFormat = '&wt=json';
$solrIntruct = (substr ($this->_solrHost, - 1) == "/") ? $this->_solrHost : $this->_solrHost . "/";
$solrIntruct .= $workspace;
$solrIntruct .= "/select/?q=$query";
$solrIntruct .= "&echoParams=none";
$solrIntruct .= self::SOLR_VERSION;
$solrIntruct .= $start;
$solrIntruct .= $rows;
$solrIntruct .= $facets;
$solrIntruct .= $filters;
$solrIntruct .= $resultFormat;
// send query
// search the cases in base to datatable parameters
$handler = curl_init ($solrIntruct);
curl_setopt ($handler, CURLOPT_RETURNTRANSFER, true);
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
curl_setopt($handler, CURLOPT_PROXY, $sysConf['proxy_host'] . ($sysConf['proxy_port'] != '' ? ':' . $sysConf['proxy_port'] : ''));
if ($sysConf['proxy_port'] != '') {
curl_setopt($handler, CURLOPT_PROXYPORT, $sysConf['proxy_port']);
}
if ($sysConf['proxy_user'] != '') {
curl_setopt($handler, CURLOPT_PROXYUSERPWD, $sysConf['proxy_user'] . ($sysConf['proxy_pass'] != '' ? ':' . $sysConf['proxy_pass'] : ''));
}
curl_setopt($handler, CURLOPT_HTTPHEADER, array('Expect:'));
}
$response = curl_exec ($handler);
curl_close ($handler);
// decode
$responseSolr = G::json_decode ($response);
if ($responseSolr->responseHeader->status != 0) {
throw new Exception (date('Y-m-d H:i:s:u') . " Error getting faceted list from Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
}

View File

@@ -73,7 +73,7 @@
// require_once (ROOT_PATH . // require_once (ROOT_PATH .
// '/businessLogic/modules/SearchIndexAccess/Solr.php'); // '/businessLogic/modules/SearchIndexAccess/Solr.php');
require_once ('class.solr.php'); require_once ('class.solr.php');
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
return $solr->isEnabled ($workspace); return $solr->isEnabled ($workspace);
} }
@@ -160,7 +160,7 @@
} }
$facetRequestEntity->filters = $filters; $facetRequestEntity->filters = $filters;
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// create list of facets // create list of facets
$facetsList = $solr->getFacetsList ($facetRequestEntity); $facetsList = $solr->getFacetsList ($facetRequestEntity);
@@ -286,7 +286,7 @@
require_once ('class.solr.php'); require_once ('class.solr.php');
// require_once (ROOT_PATH . // require_once (ROOT_PATH .
// '/businessLogic/modules/SearchIndexAccess/Solr.php'); // '/businessLogic/modules/SearchIndexAccess/Solr.php');
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// create list of facets // create list of facets
$numberDocuments = $solr->getNumberDocuments ($workspace); $numberDocuments = $solr->getNumberDocuments ($workspace);
@@ -300,7 +300,7 @@
*/ */
public function updateIndexDocument($solrUpdateDocumentEntity) public function updateIndexDocument($solrUpdateDocumentEntity)
{ {
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// create list of facets // create list of facets
$solr->updateDocument ($solrUpdateDocumentEntity); $solr->updateDocument ($solrUpdateDocumentEntity);
@@ -313,7 +313,7 @@
*/ */
public function deleteDocumentFromIndex($workspace, $idQuery) public function deleteDocumentFromIndex($workspace, $idQuery)
{ {
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// create list of facets // create list of facets
$solr->deleteDocument ($workspace, $idQuery); $solr->deleteDocument ($workspace, $idQuery);
@@ -325,7 +325,7 @@
*/ */
public function commitIndexChanges($workspace) public function commitIndexChanges($workspace)
{ {
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// commit // commit
$solr->commitChanges ($workspace); $solr->commitChanges ($workspace);
@@ -337,7 +337,7 @@
*/ */
public function optimizeIndexChanges($workspace) public function optimizeIndexChanges($workspace)
{ {
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// commit // commit
$solr->optimizeChanges ($workspace); $solr->optimizeChanges ($workspace);
@@ -373,7 +373,7 @@
// array('')); // array(''));
// execute query // execute query
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
$solrPaginatedResult = $solr->executeQuery ($solrRequestData); $solrPaginatedResult = $solr->executeQuery ($solrRequestData);
// get total number of documents in index // get total number of documents in index
@@ -426,7 +426,7 @@
{ {
require_once ('class.solr.php'); require_once ('class.solr.php');
$solr = new BpmnEngine_SearchIndexAccess_Solr ($this->_solrIsEnabled, $this->_solrHost); $solr = new BpmnEngineSearchIndexAccessSolr ($this->_solrIsEnabled, $this->_solrHost);
// print "SearchIndex!!!!"; // print "SearchIndex!!!!";
// create list of facets // create list of facets

View File

@@ -12,18 +12,14 @@
* only if this copyright statement is not removed * only if this copyright statement is not removed
*--------------------------------------------------*/ *--------------------------------------------------*/
/**
*
* @package workflow.engine.classes
*/
/** /**
* This class is derived from the class archive, is imployed to use files . * This class is derived from the class archive, is imployed to use files .
* tar * tar
* *
* @package workflow.engine.classes * @package workflow.engine.classes
* *
*/class tar_file extends archive */
class tar_file extends Archive
{ {
/** /**
@@ -31,9 +27,9 @@
* *
* @param string $name * @param string $name
*/ */
public function tar_file ($name) public function tar_file($name)
{ {
$this->archive( $name ); $this->archive($name);
$this->options['type'] = "tar"; $this->options['type'] = "tar";
} }
@@ -43,50 +39,50 @@
* *
* @return boolean * @return boolean
*/ */
public function create_tar () public function create_tar()
{ {
$pwd = getcwd(); $pwd = getcwd();
chdir( $this->options['basedir'] ); chdir($this->options['basedir']);
foreach ($this->files as $current) { foreach ($this->files as $current) {
if ($current['name'] == $this->options['name']) { if ($current['name'] == $this->options['name']) {
continue; continue;
} }
if (strlen( $current['name2'] ) > 99) { if (strlen($current['name2']) > 99) {
$path = substr( $current['name2'], 0, strpos( $current['name2'], "/", strlen( $current['name2'] ) - 100 ) + 1 ); $path = substr($current['name2'], 0, strpos($current['name2'], "/", strlen($current['name2']) - 100) + 1);
$current['name2'] = substr( $current['name2'], strlen( $path ) ); $current['name2'] = substr($current['name2'], strlen($path));
if (strlen( $path ) > 154 || strlen( $current['name2'] ) > 99) { if (strlen($path) > 154 || strlen($current['name2']) > 99) {
$this->error[] = "Could not add {$path}{$current['name2']} to archive because the filename is too long."; $this->error[] = "Could not add {$path}{$current['name2']} to archive because the filename is too long.";
continue; continue;
} }
} }
$block = pack( "a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", $current['name2'], sprintf( "%07o", $current['stat'][2] ), sprintf( "%07o", $current['stat'][4] ), sprintf( "%07o", $current['stat'][5] ), sprintf( "%011o", $current['type'] == 2 ? 0 : $current['stat'][7] ), sprintf( "%011o", $current['stat'][9] ), " ", $current['type'], $current['type'] == 2 ? @readlink( $current['name'] ) : "", "ustar ", " ", "Unknown", "Unknown", "", "", ! empty( $path ) ? $path : "", "" ); $block = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", $current['name2'], sprintf("%07o", $current['stat'][2]), sprintf("%07o", $current['stat'][4]), sprintf("%07o", $current['stat'][5]), sprintf("%011o", $current['type'] == 2 ? 0 : $current['stat'][7]), sprintf("%011o", $current['stat'][9]), " ", $current['type'], $current['type'] == 2 ? @readlink($current['name']) : "", "ustar ", " ", "Unknown", "Unknown", "", "", !empty($path) ? $path : "", "");
$checksum = 0; $checksum = 0;
for ($i = 0; $i < 512; $i ++) { for ($i = 0; $i < 512; $i++) {
$checksum += ord( substr( $block, $i, 1 ) ); $checksum += ord(substr($block, $i, 1));
} }
$checksum = pack( "a8", sprintf( "%07o", $checksum ) ); $checksum = pack("a8", sprintf("%07o", $checksum));
$block = substr_replace( $block, $checksum, 148, 8 ); $block = substr_replace($block, $checksum, 148, 8);
if ($current['type'] == 2 || $current['stat'][7] == 0) { if ($current['type'] == 2 || $current['stat'][7] == 0) {
$this->add_data( $block ); $this->add_data($block);
} elseif ($fp = @fopen( $current['name'], "rb" )) { } elseif ($fp = @fopen($current['name'], "rb")) {
$this->add_data( $block ); $this->add_data($block);
while ($temp = fread( $fp, 1048576 )) { while ($temp = fread($fp, 1048576)) {
$this->add_data( $temp ); $this->add_data($temp);
} }
if ($current['stat'][7] % 512 > 0) { if ($current['stat'][7] % 512 > 0) {
$temp = ""; $temp = "";
for ($i = 0; $i < 512 - $current['stat'][7] % 512; $i ++) { for ($i = 0; $i < 512 - $current['stat'][7] % 512; $i++) {
$temp .= "\0"; $temp .= "\0";
} }
$this->add_data( $temp ); $this->add_data($temp);
} }
fclose( $fp ); fclose($fp);
} else { } else {
$this->error[] = "Could not open file {$current['name']} for reading. It was not added."; $this->error[] = "Could not open file {$current['name']} for reading. It was not added.";
} }
} }
$this->add_data( pack( "a1024", "" ) ); $this->add_data(pack("a1024", ""));
chdir( $pwd ); chdir($pwd);
return 1; return 1;
} }
@@ -95,58 +91,58 @@
* *
* @return void * @return void
*/ */
public function extract_files () public function extract_files()
{ {
$pwd = getcwd(); $pwd = getcwd();
chdir( $this->options['basedir'] ); chdir($this->options['basedir']);
if ($fp = $this->open_archive()) { if ($fp = $this->open_archive()) {
if ($this->options['inmemory'] == 1) { if ($this->options['inmemory'] == 1) {
$this->files = array (); $this->files = array();
} }
while ($block = fread( $fp, 512 )) { while ($block = fread($fp, 512)) {
$temp = unpack( "a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2temp/a32temp/a32temp/a8temp/a8temp/a155prefix/a12temp", $block ); $temp = unpack("a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2temp/a32temp/a32temp/a8temp/a8temp/a155prefix/a12temp", $block);
$file = array ('name' => $this->options['basedir'] . '/' . $temp['prefix'] . $temp['name'],'stat' => array (2 => $temp['mode'],4 => octdec( $temp['uid'] ),5 => octdec( $temp['gid'] ),7 => octdec( $temp['size'] ),9 => octdec( $temp['mtime'] ) $file = array('name' => $this->options['basedir'] . '/' . $temp['prefix'] . $temp['name'], 'stat' => array(2 => $temp['mode'], 4 => octdec($temp['uid']), 5 => octdec($temp['gid']), 7 => octdec($temp['size']), 9 => octdec($temp['mtime'])
),'checksum' => octdec( $temp['checksum'] ),'type' => $temp['type'],'magic' => $temp['magic'] ), 'checksum' => octdec($temp['checksum']), 'type' => $temp['type'], 'magic' => $temp['magic']
); );
if ($file['checksum'] == 0x00000000) { if ($file['checksum'] == 0x00000000) {
break; break;
} elseif (substr( $file['magic'], 0, 5 ) != "ustar") { } elseif (substr($file['magic'], 0, 5) != "ustar") {
$this->error[] = "This script does not support extracting this type of tar file."; $this->error[] = "This script does not support extracting this type of tar file.";
break; break;
} }
$block = substr_replace( $block, " ", 148, 8 ); $block = substr_replace($block, " ", 148, 8);
$checksum = 0; $checksum = 0;
for ($i = 0; $i < 512; $i ++) { for ($i = 0; $i < 512; $i++) {
$checksum += ord( substr( $block, $i, 1 ) ); $checksum += ord(substr($block, $i, 1));
} }
if ($file['checksum'] != $checksum) { if ($file['checksum'] != $checksum) {
$this->error[] = "Could not extract from {$this->options['name']}, it is corrupt."; $this->error[] = "Could not extract from {$this->options['name']}, it is corrupt.";
} }
if ($this->options['inmemory'] == 1) { if ($this->options['inmemory'] == 1) {
$file['data'] = fread( $fp, $file['stat'][7] ); $file['data'] = fread($fp, $file['stat'][7]);
fread( $fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512) ); fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512));
unset( $file['checksum'], $file['magic'] ); unset($file['checksum'], $file['magic']);
$this->files[] = $file; $this->files[] = $file;
} elseif ($file['type'] == 5) { } elseif ($file['type'] == 5) {
if (! is_dir( $file['name'] )) { if (!is_dir($file['name'])) {
//mkdir($file['name'], $file['stat'][2]); //mkdir($file['name'], $file['stat'][2]);
mkdir( $file['name'], 0775 ); mkdir($file['name'], 0775);
} }
} elseif ($this->options['overwrite'] == 0 && file_exists( $file['name'] )) { } elseif ($this->options['overwrite'] == 0 && file_exists($file['name'])) {
$this->error[] = "{$file['name']} already exist."; $this->error[] = "{$file['name']} already exist.";
continue; continue;
} elseif ($file['type'] == 2) { } elseif ($file['type'] == 2) {
symlink( $temp['symlink'], $file['name'] ); symlink($temp['symlink'], $file['name']);
//chmod($file['name'], $file['stat'][2]); //chmod($file['name'], $file['stat'][2]);
} elseif ($new = @fopen( $file['name'], "wb" )) { } elseif ($new = @fopen($file['name'], "wb")) {
fwrite( $new, fread( $fp, $file['stat'][7] ) ); fwrite($new, fread($fp, $file['stat'][7]));
if ((512 - $file['stat'][7] % 512) != 512) { if ((512 - $file['stat'][7] % 512) != 512) {
fread( $fp, (512 - $file['stat'][7] % 512) ); fread($fp, (512 - $file['stat'][7] % 512));
} }
//fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512)); //fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512));
fclose( $new ); fclose($new);
//chmod($file['name'], $file['stat'][2]); //chmod($file['name'], $file['stat'][2]);
chmod( $file['name'], 0777 ); chmod($file['name'], 0777);
$this->files[] = $file['name']; $this->files[] = $file['name'];
} else { } else {
$this->error[] = "Could not open {$file['name']} for writing."; $this->error[] = "Could not open {$file['name']} for writing.";
@@ -154,13 +150,13 @@
} }
//chown($file['name'], $file['stat'][4]); //chown($file['name'], $file['stat'][4]);
//chgrp($file['name'], $file['stat'][5]); //chgrp($file['name'], $file['stat'][5]);
@touch( $file['name'], $file['stat'][9] ); @touch($file['name'], $file['stat'][9]);
unset( $file ); unset($file);
} }
} else { } else {
$this->error[] = "Could not open file {$this->options['name']}"; $this->error[] = "Could not open file {$this->options['name']}";
} }
chdir( $pwd ); chdir($pwd);
} }
/** /**
@@ -168,8 +164,8 @@
* *
* @return void * @return void
*/ */
public function open_archive () public function open_archive()
{ {
return @fopen( $this->options['name'], "rb" ); return @fopen($this->options['name'], "rb");
} }
} }

View File

@@ -12,22 +12,18 @@
* only if this copyright statement is not removed * only if this copyright statement is not removed
*--------------------------------------------------*/ *--------------------------------------------------*/
/**
*
* @package workflow.engine.classes
*/
/** /**
* This class is derived from the class archive, is imployed to use files . * This class is derived from the class archive, is imployed to use files .
* zip * zip
* *
* @package workflow.engine.classes * @package workflow.engine.classes
*/class zip_file extends archive */
class zip_file extends Archive
{ {
public function zip_file ($name) public function zip_file($name)
{ {
$this->archive( $name ); $this->archive($name);
$this->options['type'] = "zip"; $this->options['type'] = "zip";
} }
@@ -37,77 +33,77 @@
* *
* @return boolean * @return boolean
*/ */
public function create_zip () public function create_zip()
{ {
$files = 0; $files = 0;
$offset = 0; $offset = 0;
$central = ""; $central = "";
if (! empty( $this->options['sfx'] )) { if (!empty($this->options['sfx'])) {
if ($fp = @fopen( $this->options['sfx'], "rb" )) { if ($fp = @fopen($this->options['sfx'], "rb")) {
$temp = fread( $fp, filesize( $this->options['sfx'] ) ); $temp = fread($fp, filesize($this->options['sfx']));
fclose( $fp ); fclose($fp);
$this->add_data( $temp ); $this->add_data($temp);
$offset += strlen( $temp ); $offset += strlen($temp);
unset( $temp ); unset($temp);
} else { } else {
$this->error[] = "Could not open sfx module from {$this->options['sfx']}."; $this->error[] = "Could not open sfx module from {$this->options['sfx']}.";
} }
} }
$pwd = getcwd(); $pwd = getcwd();
chdir( $this->options['basedir'] ); chdir($this->options['basedir']);
foreach ($this->files as $current) { foreach ($this->files as $current) {
if ($current['name'] == $this->options['name']) { if ($current['name'] == $this->options['name']) {
continue; continue;
} }
$timedate = explode( " ", date( "Y n j G i s", $current['stat'][9] ) ); $timedate = explode(" ", date("Y n j G i s", $current['stat'][9]));
$timedate = ($timedate[0] - 1980 << 25) | ($timedate[1] << 21) | ($timedate[2] << 16) | ($timedate[3] << 11) | ($timedate[4] << 5) | ($timedate[5]); $timedate = ($timedate[0] - 1980 << 25) | ($timedate[1] << 21) | ($timedate[2] << 16) | ($timedate[3] << 11) | ($timedate[4] << 5) | ($timedate[5]);
$block = pack( "VvvvV", 0x04034b50, 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate ); $block = pack("VvvvV", 0x04034b50, 0x000A, 0x0000, (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate);
if ($current['stat'][7] == 0 && $current['type'] == 5) { if ($current['stat'][7] == 0 && $current['type'] == 5) {
$block .= pack( "VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ) + 1, 0x0000 ); $block .= pack("VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']) + 1, 0x0000);
$block .= $current['name2'] . "/"; $block .= $current['name2'] . "/";
$this->add_data( $block ); $this->add_data($block);
$central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ) + 1, 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset ); $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']) + 1, 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset);
$central .= $current['name2'] . "/"; $central .= $current['name2'] . "/";
$files ++; $files++;
$offset += (31 + strlen( $current['name2'] )); $offset += (31 + strlen($current['name2']));
} elseif ($current['stat'][7] == 0) { } elseif ($current['stat'][7] == 0) {
$block .= pack( "VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ), 0x0000 ); $block .= pack("VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']), 0x0000);
$block .= $current['name2']; $block .= $current['name2'];
$this->add_data( $block ); $this->add_data($block);
$central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen( $current['name2'] ), 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset ); $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']), 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset);
$central .= $current['name2']; $central .= $current['name2'];
$files ++; $files++;
$offset += (30 + strlen( $current['name2'] )); $offset += (30 + strlen($current['name2']));
} elseif ($fp = @fopen( $current['name'], "rb" )) { } elseif ($fp = @fopen($current['name'], "rb")) {
$temp = fread( $fp, $current['stat'][7] ); $temp = fread($fp, $current['stat'][7]);
fclose( $fp ); fclose($fp);
$crc32 = G::encryptCrc32( $temp ); $crc32 = G::encryptCrc32($temp);
if (! isset( $current['method'] ) && $this->options['method'] == 1) { if (!isset($current['method']) && $this->options['method'] == 1) {
$temp = gzcompress( $temp, $this->options['level'] ); $temp = gzcompress($temp, $this->options['level']);
$size = strlen( $temp ) - 6; $size = strlen($temp) - 6;
$temp = substr( $temp, 2, $size ); $temp = substr($temp, 2, $size);
} else { } else {
$size = strlen( $temp ); $size = strlen($temp);
} }
$block .= pack( "VVVvv", $crc32, $size, $current['stat'][7], strlen( $current['name2'] ), 0x0000 ); $block .= pack("VVVvv", $crc32, $size, $current['stat'][7], strlen($current['name2']), 0x0000);
$block .= $current['name2']; $block .= $current['name2'];
$this->add_data( $block ); $this->add_data($block);
$this->add_data( $temp ); $this->add_data($temp);
unset( $temp ); unset($temp);
$central .= pack( "VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset( $current['method'] ) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, $crc32, $size, $current['stat'][7], strlen( $current['name2'] ), 0x0000, 0x0000, 0x0000, 0x0000, 0x00000000, $offset ); $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000, (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate, $crc32, $size, $current['stat'][7], strlen($current['name2']), 0x0000, 0x0000, 0x0000, 0x0000, 0x00000000, $offset);
$central .= $current['name2']; $central .= $current['name2'];
$files ++; $files++;
$offset += (30 + strlen( $current['name2'] ) + $size); $offset += (30 + strlen($current['name2']) + $size);
} else { } else {
$this->error[] = "Could not open file {$current['name']} for reading. It was not added."; $this->error[] = "Could not open file {$current['name']} for reading. It was not added.";
} }
} }
$this->add_data( $central ); $this->add_data($central);
$this->add_data( pack( "VvvvvVVv", 0x06054b50, 0x0000, 0x0000, $files, $files, strlen( $central ), $offset, ! empty( $this->options['comment'] ) ? strlen( $this->options['comment'] ) : 0x0000 ) ); $this->add_data(pack("VvvvvVVv", 0x06054b50, 0x0000, 0x0000, $files, $files, strlen($central), $offset, !empty($this->options['comment']) ? strlen($this->options['comment']) : 0x0000));
if (! empty( $this->options['comment'] )) { if (!empty($this->options['comment'])) {
$this->add_data( $this->options['comment'] ); $this->add_data($this->options['comment']);
} }
chdir( $pwd ); chdir($pwd);
return 1; return 1;
} }
} }

View File

@@ -9,6 +9,7 @@ use ProcessMaker\Plugins\PluginRegistry;
use Exception; use Exception;
use wsBase; use wsBase;
use RBAC; use RBAC;
use Applications;
/** /**
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com> * @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
@@ -261,7 +262,7 @@ class Cases
$newerThan = (!empty($dataList['newerThan']))? $dataList['newerThan'] : ''; $newerThan = (!empty($dataList['newerThan']))? $dataList['newerThan'] : '';
$oldestThan = (!empty($dataList['oldestthan']))? $dataList['oldestthan'] : ''; $oldestThan = (!empty($dataList['oldestthan']))? $dataList['oldestthan'] : '';
$apps = new \Applications(); $apps = new Applications();
$response = $apps->getAll( $response = $apps->getAll(
$userUid, $userUid,
$start, $start,
@@ -335,7 +336,7 @@ class Cases
$dateTo = (!empty( $dataList["dateTo"] )) ? substr( $dataList["dateTo"], 0, 10 ) : ""; $dateTo = (!empty( $dataList["dateTo"] )) ? substr( $dataList["dateTo"], 0, 10 ) : "";
$filterStatus = isset( $dataList["filterStatus"] ) ? strtoupper( $dataList["filterStatus"] ) : ""; $filterStatus = isset( $dataList["filterStatus"] ) ? strtoupper( $dataList["filterStatus"] ) : "";
$apps = new \Applications(); $apps = new Applications();
$response = $apps->searchAll( $response = $apps->searchAll(
$userId, $userId,
$start, $start,
@@ -2317,7 +2318,7 @@ class Cases
$tas_uid = $aCaseField["TAS_UID"]; $tas_uid = $aCaseField["TAS_UID"];
$pro_uid = $aCaseField["PRO_UID"]; $pro_uid = $aCaseField["PRO_UID"];
$oApplication = new \Applications(); $oApplication = new Applications();
$aField = $oApplication->getSteps($app_uid, $del_index, $tas_uid, $pro_uid); $aField = $oApplication->getSteps($app_uid, $del_index, $tas_uid, $pro_uid);
return $aField; return $aField;