Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1245193
db_tag_processor.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 21, 5:30 AM
Size
43 KB
Mime Type
text/x-php
Expires
Sun, Nov 23, 5:30 AM (1 d, 20 h)
Engine
blob
Format
Raw Data
Handle
809791
Attached To
rINP In-Portal
db_tag_processor.php
View Options
<?php
class
kDBTagProcessor
extends
TagProcessor
{
/**
* Description
*
* @var kDBConnection
* @access public
*/
var
$Conn
;
function
kDBTagProcessor
()
{
parent
::
kBase
();
$this
->
Conn
=&
$this
->
Application
->
GetADODBConnection
();
}
/**
* Returns true if "new" button was pressed in toolbar
*
* @param Array $params
* @return bool
*/
function
IsNewMode
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
return
$object
->
GetID
()
<=
0
;
}
/**
* Returns view menu name for current prefix
*
* @param Array $params
* @return string
*/
function
GetItemName
(
$params
)
{
$item_name
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'ViewMenuPhrase'
);
return
$this
->
Application
->
Phrase
(
$item_name
);
}
function
ViewMenu
(
$params
)
{
$block_params
=
$params
;
unset
(
$block_params
[
'block'
]);
$block_params
[
'name'
]
=
$params
[
'block'
];
$list
=&
$this
->
GetList
(
$params
);
$block_params
[
'PrefixSpecial'
]
=
$list
->
getPrefixSpecial
();
return
$this
->
Application
->
ParseBlock
(
$block_params
);
}
function
SearchKeyword
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
return
$this
->
Application
->
RecallVar
(
$list
->
getPrefixSpecial
().
'_search_keyword'
);
}
/**
* Draw filter menu content (for ViewMenu) based on filters defined in config
*
* @param Array $params
* @return string
*/
function
DrawFilterMenu
(
$params
)
{
$block_params
=
$this
->
prepareTagParams
(
$params
);
$block_params
[
'name'
]
=
$params
[
'spearator_block'
];
$separator
=
$this
->
Application
->
ParseBlock
(
$block_params
);
$filter_menu
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'FilterMenu'
);
if
(!
$filter_menu
)
{
trigger_error
(
'<span class="debug_error">no filters defined</span> for prefix <b>'
.
$this
->
Prefix
.
'</b>, but <b>DrawFilterMenu</b> tag used'
,
E_USER_WARNING
);
return
''
;
}
// Params: label, filter_action, filter_status
$block_params
[
'name'
]
=
$params
[
'item_block'
];
$view_filter
=
$this
->
Application
->
RecallVar
(
$this
->
getPrefixSpecial
().
'_view_filter'
);
if
(
$view_filter
===
false
)
{
$event_params
=
Array
(
'prefix'
=>
$this
->
Prefix
,
'special'
=>
$this
->
Special
,
'name'
=>
'OnRemoveFilters'
);
$this
->
Application
->
HandleEvent
(
new
kEvent
(
$event_params
)
);
$view_filter
=
$this
->
Application
->
RecallVar
(
$this
->
getPrefixSpecial
().
'_view_filter'
);
}
$view_filter
=
unserialize
(
$view_filter
);
$filters
=
Array
();
$prefix_special
=
$this
->
getPrefixSpecial
();
foreach
(
$filter_menu
[
'Filters'
]
as
$filter_key
=>
$filter_params
)
{
if
(!
$filter_params
)
{
$filters
[]
=
$separator
;
continue
;
}
$block_params
[
'label'
]
=
addslashes
(
$this
->
Application
->
Phrase
(
$filter_params
[
'label'
])
);
if
(
getArrayValue
(
$view_filter
,
$filter_key
)
)
{
$submit
=
0
;
$status
=
1
;
}
else
{
$submit
=
1
;
$status
=
0
;
}
$block_params
[
'filter_action'
]
=
'set_filter("'
.
$prefix_special
.
'","'
.
$filter_key
.
'","'
.
$submit
.
'",'
.
$params
[
'ajax'
].
');'
;
$block_params
[
'filter_status'
]
=
$status
;
$filters
[]
=
$this
->
Application
->
ParseBlock
(
$block_params
);
}
return
implode
(
''
,
$filters
);
}
function
IterateGridFields
(
$params
)
{
$mode
=
$params
[
'mode'
];
$def_block
=
$params
[
'block'
];
$grids
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'Grids'
);
$grid_config
=
$grids
[
$params
[
'grid'
]][
'Fields'
];
$std_params
[
'pass_params'
]=
'true'
;
$std_params
[
'PrefixSpecial'
]=
$this
->
getPrefixSpecial
();
$o
=
''
;
foreach
(
$grid_config
as
$field
=>
$options
)
{
$block_params
=
Array
();
$block_params
[
'name'
]
=
isset
(
$options
[
$mode
.
'_block'
])
?
$options
[
$mode
.
'_block'
]
:
$def_block
;
$block_params
[
'field'
]
=
$field
;
$block_params
[
'sort_field'
]
=
isset
(
$options
[
'sort_field'
])
?
$options
[
'sort_field'
]
:
$field
;
$block_params
=
array_merge
(
$std_params
,
$block_params
,
$options
);
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
}
return
$o
;
}
function
GridFieldsCount
(
$params
)
{
$grids
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'Grids'
);
$grid_config
=
$grids
[
$params
[
'grid'
]][
'Fields'
];
return
count
(
$grid_config
);
}
/**
* Prints list content using block specified
*
* @param Array $params
* @return string
* @access public
*/
function
PrintList
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
$id_field
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'IDField'
);
$list
->
Query
();
$o
=
''
;
$list
->
GoFirst
();
$block_params
=
$this
->
prepareTagParams
(
$params
);
$block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'render_as,block'
);
$block_params
[
'pass_params'
]
=
'true'
;
while
(!
$list
->
EOL
())
{
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_id'
,
$list
->
GetDBField
(
$id_field
)
);
// for edit/delete links using GET
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
$list
->
GoNext
();
}
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_id'
,
''
);
return
$o
;
}
function
InitList
(
$params
)
{
$list_name
=
isset
(
$params
[
'list_name'
])
?
$params
[
'list_name'
]
:
''
;
$names_mapping
=
$this
->
Application
->
GetVar
(
'NamesToSpecialMapping'
);
if
(
!
getArrayValue
(
$names_mapping
,
$this
->
Prefix
,
$list_name
)
)
{
$list
=&
$this
->
GetList
(
$params
);
}
}
function
BuildListSpecial
(
$params
)
{
return
$this
->
Special
;
}
/**
* Enter description here...
*
* @param Array $params
* @return kDBList
*/
function
&
GetList
(
$params
)
{
$list_name
=
$this
->
SelectParam
(
$params
,
'list_name,name'
);
if
(!
$list_name
)
{
$list_name
=
$this
->
Application
->
Parser
->
GetParam
(
'list_name'
);
}
$requery
=
getArrayValue
(
$params
,
'requery'
);
if
(
$list_name
&&
!
$requery
){
$names_mapping
=
$this
->
Application
->
GetVar
(
'NamesToSpecialMapping'
);
$special
=
getArrayValue
(
$names_mapping
,
$this
->
Prefix
,
$list_name
);
if
(!
$special
)
{
$special
=
$this
->
BuildListSpecial
(
$params
);
}
}
else
{
$special
=
$this
->
BuildListSpecial
(
$params
);
}
$prefix_special
=
rtrim
(
$this
->
Prefix
.
'.'
.
$special
,
'.'
);
$params
[
'skip_counting'
]
=
true
;
$list
=&
$this
->
Application
->
recallObject
(
$prefix_special
,
$this
->
Prefix
.
'_List'
,
$params
);
if
(
$requery
)
{
$this
->
Application
->
HandleEvent
(
$an_event
,
$prefix_special
.
':OnListBuild'
,
$params
);
}
$list
->
Query
(
$requery
);
$this
->
Special
=
$special
;
if
(
$list_name
)
{
$names_mapping
[
$this
->
Prefix
][
$list_name
]
=
$special
;
$this
->
Application
->
SetVar
(
'NamesToSpecialMapping'
,
$names_mapping
);
}
return
$list
;
}
function
ListMarker
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
$ret
=
$list
->
getPrefixSpecial
();
if
(
getArrayValue
(
$params
,
'as_preg'
)
)
$ret
=
preg_quote
(
$ret
,
'/'
);
return
$ret
;
}
function
SubmitName
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
$prefix_special
=
$list
->
getPrefixSpecial
();
return
'events['
.
$prefix_special
.
']['
.
$params
[
'event'
].
']'
;
}
function
CombinedSortingDropDownName
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
$prefix_special
=
$list
->
getPrefixSpecial
();
return
$prefix_special
.
'_CombinedSorting'
;
}
function
SortingSelected
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
$user_sorting_start
=
$this
->
getUserSortIndex
();
$sorting
=
strtolower
(
$list
->
GetOrderField
(
$user_sorting_start
).
'|'
.
$list
->
GetOrderDirection
(
$user_sorting_start
));
if
(
$sorting
==
strtolower
(
$params
[
'sorting'
]))
return
$params
[
'selected'
];
}
/**
* Prints list content using block specified
*
* @param Array $params
* @return string
* @access public
*/
function
PrintList2
(
$params
)
{
$per_page
=
$this
->
SelectParam
(
$params
,
'per_page,max_items'
);
if
(
$per_page
!==
false
)
$params
[
'per_page'
]
=
$per_page
;
$list
=&
$this
->
GetList
(
$params
);
$o
=
''
;
$direction
=
(
isset
(
$params
[
'direction'
])
&&
$params
[
'direction'
]==
"H"
)?
"H"
:
"V"
;
$columns
=
(
isset
(
$params
[
'columns'
]))
?
$params
[
'columns'
]
:
1
;
$id_field
=
(
isset
(
$params
[
'id_field'
]))
?
$params
[
'id_field'
]
:
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'IDField'
);
if
(
$columns
>
1
&&
$direction
==
"V"
)
{
$list
->
Records
=
$this
->
LinearToVertical
(
$list
->
Records
,
$columns
,
$list
->
GetPerPage
());
$list
->
SelectedCount
=
count
(
$list
->
Records
);
ksort
(
$list
->
Records
);
// this is issued twice, maybe need to be removed
}
$list
->
GoFirst
();
$block_params
=
$this
->
prepareTagParams
(
$params
);
$block_params
[
'name'
]=
$this
->
SelectParam
(
$params
,
'render_as,block'
);
$block_params
[
'pass_params'
]=
'true'
;
$block_params
[
'column_width'
]
=
100
/
$columns
;
$block_start_row_params
=
$this
->
prepareTagParams
(
$params
);
$block_start_row_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'row_start_render_as,block_row_start,row_start_block'
);
$block_end_row_params
=
$this
->
prepareTagParams
(
$params
);
$block_end_row_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'row_end_render_as,block_row_end,row_end_block'
);
$block_empty_cell_params
=
$this
->
prepareTagParams
(
$params
);
$block_empty_cell_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'empty_cell_render_as,block_empty_cell,empty_cell_block'
);
$i
=
0
;
$backup_id
=
$this
->
Application
->
GetVar
(
$this
->
Prefix
.
"_id"
);
$displayed
=
array
();
$column_number
=
1
;
while
(!
$list
->
EOL
())
{
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_id'
,
$list
->
GetDBField
(
$id_field
)
);
// for edit/delete links using GET
$this
->
Application
->
SetVar
(
$this
->
Prefix
.
'_id'
,
$list
->
GetDBField
(
$id_field
)
);
if
(
$i
%
$columns
==
0
)
{
// record in this iteration is first in row, then open row
$column_number
=
1
;
$o
.=
$block_start_row_params
[
'name'
]
?
$this
->
Application
->
ParseBlock
(
$block_start_row_params
,
1
)
:
'<tr>'
;
}
else
{
$column_number
++;
}
$block_params
[
'column_number'
]
=
$column_number
;
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
array_push
(
$displayed
,
$list
->
GetDBField
(
$id_field
));
if
((
$i
+
1
)
%
$columns
==
0
)
{
// record in next iteration is first in row too, then close this row
$o
.=
$block_end_row_params
[
'name'
]
?
$this
->
Application
->
ParseBlock
(
$block_end_row_params
,
1
)
:
'</tr>'
;
}
$list
->
GoNext
();
$i
++;
}
// append empty cells in place of missing cells in last row
while
(
$i
%
$columns
!=
0
)
{
// until next cell will be in new row append empty cells
$o
.=
$block_empty_cell_params
[
'name'
]
?
$this
->
Application
->
ParseBlock
(
$block_empty_cell_params
,
1
)
:
'<td> </td>'
;
if
((
$i
+
1
)
%
$columns
==
0
)
{
// record in next iteration is first in row too, then close this row
$o
.=
$block_end_row_params
[
'name'
]
?
$this
->
Application
->
ParseBlock
(
$block_end_row_params
,
1
)
:
'</tr>'
;
}
$i
++;
}
$cur_displayed
=
$this
->
Application
->
GetVar
(
$this
->
Prefix
.
'_displayed_ids'
);
if
(!
$cur_displayed
)
{
$cur_displayed
=
Array
();
}
else
{
$cur_displayed
=
explode
(
','
,
$cur_displayed
);
}
$displayed
=
array_unique
(
array_merge
(
$displayed
,
$cur_displayed
));
$this
->
Application
->
SetVar
(
$this
->
Prefix
.
'_displayed_ids'
,
implode
(
','
,
$displayed
));
$this
->
Application
->
SetVar
(
$this
->
Prefix
.
'_id'
,
$backup_id
);
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_id'
,
''
);
if
(
isset
(
$params
[
'more_link_render_as'
]))
{
$block_params
=
$params
;
$params
[
'render_as'
]
=
$params
[
'more_link_render_as'
];
$o
.=
$this
->
MoreLink
(
$params
);
}
return
$o
;
}
function
MoreLink
(
$params
)
{
$per_page
=
$this
->
SelectParam
(
$params
,
'per_page,max_items'
);
if
(
$per_page
!==
false
)
$params
[
'per_page'
]
=
$per_page
;
$list
=&
$this
->
GetList
(
$params
);
if
(
$list
->
PerPage
<
$list
->
RecordsCount
)
{
$block_params
=
array
();
$block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'render_as,block'
);
return
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
}
}
function
NotLastItem
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
// maybe we should use $this->GetList($params) instead
return
(
$object
->
CurrentIndex
<
min
(
$object
->
PerPage
,
$object
->
RecordsCount
)
-
1
);
}
function
PageLink
(
$params
)
{
$t
=
isset
(
$params
[
'template'
])
?
$param
[
'template'
]
:
''
;
if
(!
$t
)
$t
=
$this
->
Application
->
GetVar
(
't'
);
if
(
isset
(
$params
[
'page'
]))
{
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_Page'
,
$params
[
'page'
]);
}
// $http_query =& $this->Application->recallObject('HTTPQuery');
// $get = $http_query->getRedirectParams();
$pass
=
Array
(
'pass'
=>
'all,'
.
$this
->
getPrefixSpecial
());
// $pass = array_merge($get, $pass);
return
$this
->
Application
->
HREF
(
$t
,
''
,
$pass
);
}
function
ColumnWidth
(
$params
)
{
$columns
=
$this
->
Application
->
Parser
->
GetParam
(
'columns'
);
return
round
(
100
/
$columns
).
'%'
;
}
/**
* Append prefix and special to tag
* params (get them from tagname) like
* they were really passed as params
*
* @param Array $tag_params
* @return Array
* @access protected
*/
function
prepareTagParams
(
$tag_params
=
Array
())
{
/*if (isset($tag_params['list_name'])) {
$list =& $this->GetList($tag_params);
$this->Init($list->Prefix, $list->Special);
}*/
$ret
=
$tag_params
;
$ret
[
'Prefix'
]
=
$this
->
Prefix
;
$ret
[
'Special'
]
=
$this
->
Special
;
$ret
[
'PrefixSpecial'
]
=
$this
->
getPrefixSpecial
();
return
$ret
;
}
function
GetISO
(
$currency
)
{
if
(
$currency
==
'selected'
)
{
$iso
=
$this
->
Application
->
RecallVar
(
'curr_iso'
);
}
elseif
(
$currency
==
'primary'
||
$currency
==
''
)
{
$iso
=
$this
->
Application
->
GetPrimaryCurrency
();
}
else
{
//explicit currency
$iso
=
$currency
;
}
return
$iso
;
}
function
ConvertCurrency
(
$value
,
$iso
)
{
$converter
=&
$this
->
Application
->
recallObject
(
'kCurrencyRates'
);
// convery primary currency to selected (if they are the same, converter will just return)
$value
=
$converter
->
Convert
(
$value
,
'PRIMARY'
,
$iso
);
return
$value
;
}
function
AddCurrencySymbol
(
$value
,
$iso
)
{
$this
->
Application
->
setUnitOption
(
'curr'
,
'AutoLoad'
,
false
);
$currency
=&
$this
->
Application
->
recallObject
(
'curr.-'
.
$iso
);
if
(
!
$currency
->
isLoaded
()
)
$currency
->
Load
(
$iso
,
'ISO'
);
$symbol
=
$currency
->
GetDBField
(
'Symbol'
);
if
(!
$symbol
)
$symbol
=
$currency
->
GetDBField
(
'ISO'
).
' '
;
if
(
$currency
->
GetDBField
(
'SymbolPosition'
)
==
0
)
{
$value
=
$symbol
.
$value
;
}
if
(
$currency
->
GetDBField
(
'SymbolPosition'
)
==
1
)
{
$value
=
$value
.
$symbol
;
}
return
$value
;
}
/**
* Get's requested field value
*
* @param Array $params
* @return string
* @access public
*/
function
Field
(
$params
)
{
$field
=
$this
->
SelectParam
(
$params
,
'name,field'
);
if
(
!
$this
->
Application
->
IsAdmin
()
)
$params
[
'no_special'
]
=
'no_special'
;
$object
=&
$this
->
getObject
(
$params
);
if
(
$this
->
HasParam
(
$params
,
'db'
)
)
{
$value
=
$object
->
GetDBField
(
$field
);
}
else
{
if
(
$this
->
HasParam
(
$params
,
'currency'
)
)
{
$iso
=
$this
->
GetISO
(
$params
[
'currency'
]);
$original
=
$object
->
GetDBField
(
$field
);
$value
=
$this
->
ConvertCurrency
(
$original
,
$iso
);
$object
->
SetDBField
(
$field
,
$value
);
$object
->
Fields
[
$field
][
'converted'
]
=
true
;
}
$format
=
getArrayValue
(
$params
,
'format'
);
if
(
!
$format
||
$format
==
'$format'
)
{
$format
=
null
;
}
else
{
if
(
preg_match
(
"/_regional_(.*)/"
,
$format
,
$regs
))
{
$lang
=&
$this
->
Application
->
recallObject
(
'lang.current'
);
$format
=
$lang
->
GetDBField
(
$regs
[
1
]);
}
}
$value
=
$object
->
GetField
(
$field
,
$format
);
if
(
$this
->
SelectParam
(
$params
,
'negative'
)
)
{
if
(
strpos
(
$value
,
'-'
)
===
0
)
{
$value
=
substr
(
$value
,
1
);
}
else
{
$value
=
'-'
.
$value
;
}
}
if
(
$this
->
HasParam
(
$params
,
'currency'
)
)
{
$value
=
$this
->
AddCurrencySymbol
(
$value
,
$iso
);
$params
[
'no_special'
]
=
1
;
}
}
if
(
getArrayValue
(
$params
,
'nl2br'
)
)
$value
=
nl2br
(
$value
);
if
(
!
$this
->
HasParam
(
$params
,
'no_special'
)
)
$value
=
htmlspecialchars
(
$value
);
if
(
getArrayValue
(
$params
,
'checked'
)
)
$value
=
(
$value
==
1
)
?
'checked'
:
''
;
if
(
getArrayValue
(
$params
,
'as_label'
)
)
$value
=
$this
->
Application
->
Phrase
(
$value
);
$first_chars
=
$this
->
SelectParam
(
$params
,
'first_chars,cut_first'
);
if
(
$first_chars
)
{
$needs_cut
=
strlen
(
$value
)
>
$first_chars
;
$value
=
substr
(
$value
,
0
,
$first_chars
);
if
(
$needs_cut
)
$value
.=
' ...'
;
}
if
(
$value
!=
''
)
$this
->
Application
->
Parser
->
DataExists
=
true
;
if
(
$this
->
HasParam
(
$params
,
'currency'
)
)
{
//restoring value in original currency, for other Field tags to work properly
$object
->
SetDBField
(
$field
,
$original
);
}
return
$value
;
}
function
SetField
(
$params
)
{
// <inp2:SetField field="Value" src=p:cust_{$custom_name}"/>
$object
=&
$this
->
getObject
(
$params
);
$dst_field
=
$this
->
SelectParam
(
$params
,
'name,field'
);
list
(
$prefix_special
,
$src_field
)
=
explode
(
':'
,
$params
[
'src'
]);
$src_object
=&
$this
->
Application
->
recallObject
(
$prefix_special
);
$object
->
SetDBField
(
$dst_field
,
$src_object
->
GetDBField
(
$src_field
));
}
/**
* Checks if parameter is passed
* Note: works like Tag and line simple method too
*
* @param Array $params
* @param string $param_name
* @return bool
*/
function
HasParam
(
$params
,
$param_name
=
null
)
{
if
(
!
isset
(
$param_name
)
)
{
$param_name
=
$this
->
SelectParam
(
$params
,
'name'
);
$params
=
$this
->
Application
->
Parser
->
Params
;
}
$value
=
getArrayValue
(
$params
,
$param_name
);
return
$value
&&
(
$value
!=
'$'
.
$param_name
);
}
function
PhraseField
(
$params
)
{
$field_label
=
$this
->
Field
(
$params
);
$translation
=
$this
->
Application
->
Phrase
(
$field_label
);
return
$translation
;
}
function
Error
(
$params
)
{
$field
=
$params
[
'field'
];
$object
=&
$this
->
getObject
(
$params
);
$msg
=
$object
->
GetErrorMsg
(
$field
,
false
);
return
$msg
;
}
function
HasError
(
$params
)
{
if
(
$params
[
'field'
]
==
'any'
)
{
$object
=&
$this
->
getObject
(
$params
);
$skip_fields
=
getArrayValue
(
$params
,
'except'
);
$skip_fields
=
$skip_fields
?
explode
(
','
,
$skip_fields
)
:
Array
();
return
$object
->
HasErrors
(
$skip_fields
);
}
else
{
$fields
=
$this
->
SelectParam
(
$params
,
'field,fields'
);
$fields
=
explode
(
','
,
$fields
);
$res
=
false
;
foreach
(
$fields
as
$field
)
{
$params
[
'field'
]
=
$field
;
$res
=
$res
||
(
$this
->
Error
(
$params
)
!=
''
);
}
return
$res
;
}
}
function
IsRequired
(
$params
)
{
$field
=
$params
[
'field'
];
$object
=&
$this
->
getObject
(
$params
);;
$options
=
$object
->
GetFieldOptions
(
$field
);
return
getArrayValue
(
$options
,
'required'
);
}
function
PredefinedOptions
(
$params
)
{
$field
=
$params
[
'field'
];
$object
=&
$this
->
getObject
(
$params
);
$value
=
$object
->
GetDBField
(
$field
);
$options
=
$object
->
GetFieldOptions
(
$field
);
if
(
$this
->
HasParam
(
$params
,
'has_empty'
)
)
{
$empty_value
=
getArrayValue
(
$params
,
'empty_value'
);
if
(
$empty_value
===
false
)
$empty_value
=
''
;
$options
[
'options'
]
=
array_merge_recursive2
(
Array
(
$empty_value
=>
''
),
$options
[
'options'
]
);
}
$block_params
=
$this
->
prepareTagParams
(
$params
);
$block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'render_as,block'
);
$block_params
[
'field'
]
=
$params
[
'field'
];
$block_params
[
'pass_params'
]
=
'true'
;
$block_params
[
'field_name'
]
=
$this
->
InputName
(
$params
);
$block_params
[
'PrefixSpecial'
]
=
$this
->
getPrefixSpecial
();
$selected_param_name
=
getArrayValue
(
$params
,
'selected_param'
);
if
(!
$selected_param_name
)
$selected_param_name
=
$params
[
'selected'
];
$selected
=
$params
[
'selected'
];
$o
=
''
;
if
(
$this
->
HasParam
(
$params
,
'no_empty'
)
&&
!
getArrayValue
(
$options
[
'options'
],
''
)
)
array_shift
(
$options
[
'options'
]);
if
(
strpos
(
$value
,
'|'
)
!==
false
)
{
// multiple selection checkboxes
$value
=
explode
(
'|'
,
substr
(
$value
,
1
,
-
1
)
);
foreach
(
$options
[
'options'
]
as
$key
=>
$val
)
{
$block_params
[
'key'
]
=
$key
;
$block_params
[
'option'
]
=
$val
;
$block_params
[
$selected_param_name
]
=
(
in_array
(
$key
,
$value
)
?
' '
.
$selected
:
''
);
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
}
}
else
{
// single selection radio or checkboxes
foreach
(
$options
[
'options'
]
as
$key
=>
$val
)
{
$block_params
[
'key'
]
=
$key
;
$block_params
[
'option'
]
=
$val
;
$block_params
[
$selected_param_name
]
=
(
$key
==
$value
?
' '
.
$selected
:
''
);
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
}
}
return
$o
;
}
function
PredefinedSearchOptions
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$field
=
$params
[
'field'
];
$saved_value
=
$object
->
GetDBField
(
$field
);
$custom_filters
=
$this
->
Application
->
RecallVar
(
$this
->
getPrefixSpecial
().
'_custom_filters'
);
if
(
$custom_filters
)
{
$custom_filters
=
unserialize
(
$custom_filters
);
$append
=
getArrayValue
(
$params
,
'type'
)
?
'_'
.
$params
[
'type'
]
:
''
;
$object
->
SetDBField
(
$field
,
$custom_filters
[
$field
.
$append
]);
}
else
{
$object
->
SetDBField
(
$field
,
''
);
}
$ret
=
$this
->
PredefinedOptions
(
$params
);
$object
->
SetDBField
(
$field
,
$saved_value
);
return
$ret
;
}
function
Format
(
$params
)
{
$field
=
$params
[
'field'
];
$object
=&
$this
->
getObject
(
$params
);
$options
=
$object
->
GetFieldOptions
(
$field
);
$format
=
$options
[
$this
->
SelectParam
(
$params
,
'input_format'
)
?
'input_format'
:
'format'
];
$formatter_class
=
getArrayValue
(
$options
,
'formatter'
);
if
(
$formatter_class
)
{
$formatter
=&
$this
->
Application
->
recallObject
(
$formatter_class
);
$human_format
=
getArrayValue
(
$params
,
'human'
);
$edit_size
=
getArrayValue
(
$params
,
'edit_size'
);
$sample
=
getArrayValue
(
$params
,
'sample'
);
if
(
$sample
)
{
return
$formatter
->
GetSample
(
$field
,
$options
,
$object
);
}
elseif
(
$human_format
||
$edit_size
)
{
$format
=
$formatter
->
HumanFormat
(
$format
);
return
$edit_size
?
strlen
(
$format
)
:
$format
;
}
}
return
$format
;
}
/**
* Print grid pagination using
* block names specified
*
* @param Array $params
* @return string
* @access public
*/
function
PrintPages
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
$prefix_special
=
$list
->
getPrefixSpecial
();
$total_pages
=
$list
->
GetTotalPages
();
if
(
$total_pages
)
$this
->
Application
->
Parser
->
DataExists
=
true
;
if
(
$total_pages
==
0
)
$total_pages
=
1
;
// display 1st page as selected in case if we have no pages at all
$o
=
''
;
// what are these 2 lines for?
$this
->
Application
->
SetVar
(
$prefix_special
.
'_event'
,
''
);
$this
->
Application
->
SetVar
(
$prefix_special
.
'_id'
,
''
);
$current_page
=
$list
->
Page
;
// $this->Application->RecallVar($prefix_special.'_Page');
$block_params
=
$this
->
prepareTagParams
(
$params
);
$split
=
(
isset
(
$params
[
'split'
]
)
?
$params
[
'split'
]
:
10
);
$split_start
=
$current_page
-
ceil
(
$split
/
2
);
if
(
$split_start
<
1
){
$split_start
=
1
;
}
$split_end
=
$split_start
+
$split
-
1
;
if
(
$split_end
>
$total_pages
)
{
$split_end
=
$total_pages
;
$split_start
=
max
(
$split_end
-
$split
+
1
,
1
);
}
if
(
$current_page
>
1
){
$prev_block_params
=
$this
->
prepareTagParams
();
if
(
$total_pages
>
$split
){
$prev_block_params
[
'page'
]
=
max
(
$current_page
-
$split
,
1
);
$prev_block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'prev_page_split_render_as,prev_page_split_block'
);
if
(
$prev_block_params
[
'name'
]){
$o
.=
$this
->
Application
->
ParseBlock
(
$prev_block_params
,
1
);
}
}
$prev_block_params
[
'name'
]
=
'page'
;
$prev_block_params
[
'page'
]
=
$current_page
-
1
;
$prev_block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'prev_page_render_as,block_prev_page,prev_page_block'
);
if
(
$prev_block_params
[
'name'
])
{
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_Page'
,
$current_page
-
1
);
$o
.=
$this
->
Application
->
ParseBlock
(
$prev_block_params
,
1
);
}
}
else
{
if
(
$no_prev_page_block
=
$this
->
SelectParam
(
$params
,
'no_prev_page_render_as,block_no_prev_page'
)
)
{
$block_params
[
'name'
]
=
$no_prev_page_block
;
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
}
}
$separator_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'separator_render_as,block_separator'
);
for
(
$i
=
$split_start
;
$i
<=
$split_end
;
$i
++)
{
if
(
$i
==
$current_page
)
{
$block
=
$this
->
SelectParam
(
$params
,
'current_render_as,active_render_as,block_current,active_block'
);
}
else
{
$block
=
$this
->
SelectParam
(
$params
,
'link_render_as,inactive_render_as,block_link,inactive_block'
);
}
$block_params
[
'name'
]
=
$block
;
$block_params
[
'page'
]
=
$i
;
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_Page'
,
$i
);
$o
.=
$this
->
Application
->
ParseBlock
(
$block_params
,
1
);
if
(
$this
->
SelectParam
(
$params
,
'separator_render_as,block_separator'
)
&&
$i
<
$split_end
)
{
$o
.=
$this
->
Application
->
ParseBlock
(
$separator_params
,
1
);
}
}
if
(
$current_page
<
$total_pages
){
$next_block_params
=
$this
->
prepareTagParams
();
$next_block_params
[
'page'
]=
$current_page
+
1
;
$next_block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'next_page_render_as,block_next_page,next_page_block'
);
if
(
$next_block_params
[
'name'
]){
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_Page'
,
$current_page
+
1
);
$o
.=
$this
->
Application
->
ParseBlock
(
$next_block_params
,
1
);
}
if
(
$total_pages
>
$split
){
$next_block_params
[
'page'
]=
min
(
$current_page
+
$split
,
$total_pages
);
$next_block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'next_page_split_render_as,next_page_split_block'
);
if
(
$next_block_params
[
'name'
]){
$o
.=
$this
->
Application
->
ParseBlock
(
$next_block_params
,
1
);
}
}
}
$this
->
Application
->
SetVar
(
$this
->
getPrefixSpecial
().
'_Page'
,
$current_page
);
return
$o
;
}
/**
* Print grid pagination using
* block names specified
*
* @param Array $params
* @return string
* @access public
*/
function
PaginationBar
(
$params
)
{
return
$this
->
PrintPages
(
$params
);
}
/**
* Returns field name (processed by kMultiLanguage formatter
* if required) and item's id from it's IDField or field required
*
* @param Array $params
* @return Array (id,field)
* @access private
*/
function
prepareInputName
(
$params
)
{
$field
=
$this
->
SelectParam
(
$params
,
'name,field'
);
$object
=&
$this
->
getObject
(
$params
);
$formatter_class
=
getArrayValue
(
$object
->
Fields
,
$field
,
'formatter'
);
if
(
$formatter_class
==
'kMultiLanguage'
)
{
$formatter
=&
$this
->
Application
->
recallObject
(
$formatter_class
);
$field
=
$formatter
->
LangFieldName
(
$field
);
}
$id_field
=
getArrayValue
(
$params
,
'IdField'
);
$id
=
$id_field
?
$object
->
GetDBField
(
$id_field
)
:
$object
->
GetID
();
return
Array
(
$id
,
$field
);
}
/**
* Returns input field name to
* be placed on form (for correct
* event processing)
*
* @param Array $params
* @return string
* @access public
*/
function
InputName
(
$params
)
{
list
(
$id
,
$field
)
=
$this
->
prepareInputName
(
$params
);
$ret
=
$this
->
getPrefixSpecial
().
'['
.
$id
.
']['
.
$field
.
']'
;
if
(
getArrayValue
(
$params
,
'as_preg'
)
)
$ret
=
preg_quote
(
$ret
,
'/'
);
return
$ret
;
}
/**
* Allows to override various field options through hidden fields with specific names in submit.
* This tag generates this special names
*
* @param Array $params
* @return string
* @author Alex
*/
function
FieldModifier
(
$params
)
{
list
(
$id
,
$field
)
=
$this
->
prepareInputName
(
$params
);
$ret
=
'field_modifiers['
.
$this
->
getPrefixSpecial
().
']['
.
$field
.
']['
.
$params
[
'type'
].
']'
;
if
(
getArrayValue
(
$params
,
'as_preg'
)
)
$ret
=
preg_quote
(
$ret
,
'/'
);
return
$ret
;
}
/**
* Returns index where 1st changable sorting field begins
*
* @return int
* @access private
*/
function
getUserSortIndex
()
{
$list_sortings
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'ListSortings'
);
$sorting_prefix
=
getArrayValue
(
$list_sortings
,
$this
->
Special
)
?
$this
->
Special
:
''
;
$user_sorting_start
=
0
;
if
(
$forced_sorting
=
getArrayValue
(
$list_sortings
,
$sorting_prefix
,
'ForcedSorting'
)
)
{
$user_sorting_start
=
count
(
$forced_sorting
);
}
return
$user_sorting_start
;
}
/**
* Returns order direction for given field
*
*
*
* @param Array $params
* @return string
* @access public
*/
function
Order
(
$params
)
{
$field
=
$params
[
'field'
];
$user_sorting_start
=
$this
->
getUserSortIndex
();
$list
=&
$this
->
GetList
(
$params
);
if
(
$list
->
GetOrderField
(
$user_sorting_start
)
==
$field
)
{
return
strtolower
(
$list
->
GetOrderDirection
(
$user_sorting_start
));
}
elseif
(
$list
->
GetOrderField
(
$user_sorting_start
+
1
)
==
$field
)
{
return
'2_'
.
strtolower
(
$list
->
GetOrderDirection
(
$user_sorting_start
+
1
));
}
else
{
return
'no'
;
}
}
/**
* Get's information of sorting field at "pos" position,
* like sorting field name (type="field") or sorting direction (type="direction")
*
* @param Array $params
* @return mixed
*/
function
OrderInfo
(
$params
)
{
$user_sorting_start
=
$this
->
getUserSortIndex
()
+
--
$params
[
'pos'
];
$list
=&
$this
->
GetList
(
$params
);
// $object =& $this->Application->recallObject( $this->getPrefixSpecial() );
if
(
$params
[
'type'
]
==
'field'
)
return
$list
->
GetOrderField
(
$user_sorting_start
);
if
(
$params
[
'type'
]
==
'direction'
)
return
$list
->
GetOrderDirection
(
$user_sorting_start
);
}
/**
* Checks if sorting field/direction matches passed field/direction parameter
*
* @param Array $params
* @return bool
*/
function
IsOrder
(
$params
)
{
$params
[
'type'
]
=
isset
(
$params
[
'field'
])
?
'field'
:
'direction'
;
$value
=
$this
->
OrderInfo
(
$params
);
if
(
isset
(
$params
[
'field'
])
)
return
$params
[
'field'
]
==
$value
;
if
(
isset
(
$params
[
'direction'
])
)
return
$params
[
'direction'
]
==
$value
;
}
/**
* Returns list perpage
*
* @param Array $params
* @return int
*/
function
PerPage
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
return
$object
->
PerPage
;
}
/**
* Checks if list perpage matches value specified
*
* @param Array $params
* @return bool
*/
function
PerPageEquals
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
return
$object
->
PerPage
==
$params
[
'value'
];
}
function
SaveEvent
(
$params
)
{
// SaveEvent is set during OnItemBuild, but we may need it before any other tag calls OnItemBuild
$object
=&
$this
->
getObject
(
$params
);
return
$this
->
Application
->
GetVar
(
$this
->
getPrefixSpecial
().
'_SaveEvent'
);
}
function
NextId
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$ids
=
explode
(
','
,
$this
->
Application
->
RecallVar
(
$this
->
getPrefixSpecial
().
'_selected_ids'
));
$cur_id
=
$object
->
GetID
();
$i
=
array_search
(
$cur_id
,
$ids
);
if
(
$i
!==
false
)
{
return
$i
<
count
(
$ids
)
-
1
?
$ids
[
$i
+
1
]
:
''
;
}
return
''
;
}
function
PrevId
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$ids
=
explode
(
','
,
$this
->
Application
->
RecallVar
(
$this
->
getPrefixSpecial
().
'_selected_ids'
));
$cur_id
=
$object
->
GetID
();
$i
=
array_search
(
$cur_id
,
$ids
);
if
(
$i
!==
false
)
{
return
$i
>
0
?
$ids
[
$i
-
1
]
:
''
;
}
return
''
;
}
function
IsSingle
(
$params
)
{
return
(
$this
->
NextId
(
$params
)
===
''
&&
$this
->
PrevId
(
$params
)
===
''
);
}
function
IsLast
(
$params
)
{
return
(
$this
->
NextId
(
$params
)
===
''
);
}
function
IsFirst
(
$params
)
{
return
(
$this
->
PrevId
(
$params
)
===
''
);
}
/**
* Checks if field value is equal to proposed one
*
* @param Array $params
* @return bool
*/
function
FieldEquals
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$ret
=
$object
->
GetDBField
(
$this
->
SelectParam
(
$params
,
'name,field'
))
==
$params
[
'value'
];
// if( getArrayValue($params,'inverse') ) $ret = !$ret;
return
$ret
;
}
function
ItemIcon
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$grids
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'Grids'
);
$icons
=&
$grids
[
$params
[
'grid'
]
][
'Icons'
];
$key
=
''
;
$status_fields
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'StatusField'
);
if
(!
$status_fields
)
return
$icons
[
'default'
];
foreach
(
$status_fields
as
$status_field
)
{
$key
.=
$object
->
GetDBField
(
$status_field
).
'_'
;
}
$key
=
rtrim
(
$key
,
'_'
);
$value
=
(
$key
!==
false
)
?
$key
:
'default'
;
return
isset
(
$icons
[
$value
])
?
$icons
[
$value
]
:
$icons
[
'default'
];
}
/**
* Generates bluebar title + initializes prefixes used on page
*
* @param Array $params
* @return string
*/
function
SectionTitle
(
$params
)
{
$preset_name
=
replaceModuleSection
(
$params
[
'title_preset'
]);
$title_presets
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'TitlePresets'
);
$title_info
=
getArrayValue
(
$title_presets
,
$preset_name
);
if
(
$title_info
===
false
)
return
str_replace
(
'#preset_name#'
,
$preset_name
,
$params
[
'title'
]);
if
(
getArrayValue
(
$title_presets
,
'default'
)
)
{
// use default labels + custom labels specified in preset used
$title_info
=
array_merge_recursive2
(
$title_presets
[
'default'
],
$title_info
);
}
$title
=
$title_info
[
'format'
];
// 1. get objects in use for title construction
$objects
=
Array
();
$object_status
=
Array
();
$status_labels
=
Array
();
$prefixes
=
getArrayValue
(
$title_info
,
'prefixes'
);
$all_tag_params
=
getArrayValue
(
$title_info
,
'tag_params'
);
if
(
$prefixes
)
{
$tag_params
=
Array
();
foreach
(
$prefixes
as
$prefix_special
)
{
$prefix_data
=
$this
->
Application
->
processPrefix
(
$prefix_special
);
$prefix_data
[
'prefix_special'
]
=
rtrim
(
$prefix_data
[
'prefix_special'
],
'.'
);
if
(
$all_tag_params
)
{
$tag_params
=
getArrayValue
(
$all_tag_params
,
$prefix_data
[
'prefix_special'
]);
if
(!
$tag_params
)
$tag_params
=
Array
();
}
$tag_params
=
array_merge_recursive2
(
$params
,
$tag_params
);
$objects
[
$prefix_data
[
'prefix_special'
]
]
=&
$this
->
Application
->
recallObject
(
$prefix_data
[
'prefix_special'
],
$prefix_data
[
'prefix'
],
$tag_params
);
$object_status
[
$prefix_data
[
'prefix_special'
]
]
=
$objects
[
$prefix_data
[
'prefix_special'
]
]->
GetID
()
?
'edit'
:
'new'
;
// a. set object's status field (adding item/editing item) for each object in title
if
(
getArrayValue
(
$title_info
[
$object_status
[
$prefix_data
[
'prefix_special'
]
].
'_status_labels'
],
$prefix_data
[
'prefix_special'
])
)
{
$status_labels
[
$prefix_data
[
'prefix_special'
]
]
=
$title_info
[
$object_status
[
$prefix_data
[
'prefix_special'
]
].
'_status_labels'
][
$prefix_data
[
'prefix_special'
]
];
$title
=
str_replace
(
'#'
.
$prefix_data
[
'prefix_special'
].
'_status#'
,
$status_labels
[
$prefix_data
[
'prefix_special'
]
],
$title
);
}
// b. setting object's titlefield value (in titlebar ONLY) to default in case if object beeing created with no titlefield filled in
if
(
$object_status
[
$prefix_data
[
'prefix_special'
]
]
==
'new'
)
{
$new_value
=
$this
->
getInfo
(
$objects
[
$prefix_data
[
'prefix_special'
]
],
'titlefield'
);
if
(!
$new_value
&&
getArrayValue
(
$title_info
[
'new_titlefield'
],
$prefix_data
[
'prefix_special'
])
)
$new_value
=
$this
->
Application
->
Phrase
(
$title_info
[
'new_titlefield'
][
$prefix_data
[
'prefix_special'
]
]);
$title
=
str_replace
(
'#'
.
$prefix_data
[
'prefix_special'
].
'_titlefield#'
,
$new_value
,
$title
);
}
}
}
// 2. replace phrases if any found in format string
$title
=
$this
->
Application
->
ReplaceLanguageTags
(
$title
,
false
);
// 3. find and replace any replacement vars
preg_match_all
(
'/#(.*_.*)#/Uis'
,
$title
,
$rets
);
if
(
$rets
[
1
])
{
$replacement_vars
=
array_keys
(
array_flip
(
$rets
[
1
])
);
foreach
(
$replacement_vars
as
$replacement_var
)
{
$var_info
=
explode
(
'_'
,
$replacement_var
,
2
);
$object
=&
$objects
[
$var_info
[
0
]
];
$new_value
=
$this
->
getInfo
(
$object
,
$var_info
[
1
]);
$title
=
str_replace
(
'#'
.
$replacement_var
.
'#'
,
$new_value
,
$title
);
}
}
$cut_first
=
getArrayValue
(
$params
,
'cut_first'
);
if
(
$cut_first
&&
strlen
(
$title
)
>
$cut_first
&&
!
preg_match
(
'/<a href="(.*)">(.*)<
\/
a>/'
,
$title
)
)
$title
=
substr
(
$title
,
0
,
$cut_first
).
' ...'
;
return
$title
;
}
function
getInfo
(&
$object
,
$info_type
)
{
switch
(
$info_type
)
{
case
'titlefield'
:
$field
=
$this
->
Application
->
getUnitOption
(
$object
->
Prefix
,
'TitleField'
);
return
$field
!==
false
?
$object
->
GetField
(
$field
)
:
'TitleField Missing'
;
break
;
case
'recordcount'
:
$of_phrase
=
$this
->
Application
->
Phrase
(
'la_of'
);
return
$object
->
NoFilterCount
!=
$object
->
RecordsCount
?
$object
->
RecordsCount
.
' '
.
$of_phrase
.
' '
.
$object
->
NoFilterCount
:
$object
->
RecordsCount
;
break
;
default
:
break
;
}
}
/**
* Parses block depending on its element type.
* For radio and select elements values are taken from 'value_list_field' in key1=value1,key2=value2
* format. key=value can be substituted by <SQL>SELECT f1 AS OptionName, f2 AS OptionValue... FROM <PREFIX>TableName </SQL>
* where prefix is TABLE_PREFIX
*
* @param Array $params
* @return string
*/
function
ConfigFormElement
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$field
=
$params
[
'field'
];
$helper
=&
$this
->
Application
->
recallObject
(
'InpCustomFieldsHelper'
);
$element_type
=
$object
->
GetDBField
(
$params
[
'element_type_field'
]);
if
(
$element_type
==
'label'
)
$element_type
=
'text'
;
$params
[
'name'
]
=
$params
[
'blocks_prefix'
].
$element_type
;
switch
(
$element_type
)
{
case
'select'
:
case
'radio'
:
$field_options
=
$object
->
GetFieldOptions
(
$field
,
'options'
);
$field_options
[
'options'
]
=
$helper
->
GetValuesHash
(
$object
->
GetDBField
(
$params
[
'value_list_field'
])
);
$object
->
SetFieldOptions
(
$field
,
$field_options
);
break
;
case
'textarea'
:
$params
[
'field_params'
]
=
$helper
->
ParseConfigSQL
(
$object
->
GetDBField
(
$params
[
'value_list_field'
]));
break
;
case
'password'
:
case
'text'
:
case
'checkbox'
:
default
:
break
;
}
return
$this
->
Application
->
ParseBlock
(
$params
,
1
);
}
/**
* Get's requested custom field value
*
* @param Array $params
* @return string
* @access public
*/
function
CustomField
(
$params
)
{
$params
[
'name'
]
=
'cust_'
.
$this
->
SelectParam
(
$params
,
'name,field'
);
return
$this
->
Field
(
$params
);
}
function
CustomFieldLabel
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$field
=
$this
->
SelectParam
(
$params
,
'name,field'
);
$sql
=
'SELECT FieldLabel
FROM '
.
$this
->
Application
->
getUnitOption
(
'cf'
,
'TableName'
).
'
WHERE FieldName = '
.
$this
->
Conn
->
qstr
(
$field
);
return
$this
->
Application
->
Phrase
(
$this
->
Conn
->
GetOne
(
$sql
));
}
/**
* transposes 1-dimensional array elements for vertical alignment according to given columns and per_page parameters
*
* @param array $arr
* @param int $columns
* @param int $per_page
* @return array
*/
function
LinearToVertical
(&
$arr
,
$columns
,
$per_page
)
{
$rows
=
$columns
;
// in case if after applying per_page limit record count less then
// can fill requrested column count, then fill as much as we can
$cols
=
min
(
ceil
(
$per_page
/
$columns
),
ceil
(
count
(
$arr
)
/
$columns
));
$imatrix
=
array
();
for
(
$row
=
0
;
$row
<
$rows
;
$row
++)
{
for
(
$col
=
0
;
$col
<
$cols
;
$col
++)
{
$source_index
=
$row
*
$cols
+
$col
;
if
(!
isset
(
$arr
[
$source_index
]))
{
// in case if source array element count is less then element count in one row
continue
;
}
$imatrix
[
$col
*
$rows
+
$row
]
=
$arr
[
$source_index
];
}
}
ksort
(
$imatrix
);
reset
(
$imatrix
);
return
$imatrix
;
}
/**
* If data was modfied & is in TempTables mode, then parse block with name passed;
* remove modification mark if not in TempTables mode
*
* @param Array $params
* @return string
* @access public
* @author Alexey
*/
function
SaveWarning
(
$params
)
{
$main_prefix
=
getArrayValue
(
$params
,
'main_prefix'
);
if
(
$main_prefix
&&
$main_prefix
!=
'$main_prefix'
)
{
$top_prefix
=
$main_prefix
;
}
else
{
$top_prefix
=
$this
->
Application
->
GetTopmostPrefix
(
$this
->
Prefix
);
}
$temp_tables
=
$this
->
Application
->
GetVar
(
$top_prefix
.
'_mode'
)
==
't'
;
$modified
=
$this
->
Application
->
RecallVar
(
$top_prefix
.
'_modified'
);
if
(
$temp_tables
&&
$modified
)
{
$block_params
=
$this
->
prepareTagParams
(
$params
);
$block_params
[
'name'
]
=
$this
->
SelectParam
(
$params
,
'render_as,name'
);
$block_params
[
'edit_mode'
]
=
$temp_tables
?
1
:
0
;
return
$this
->
Application
->
ParseBlock
(
$block_params
);
}
$this
->
Application
->
RemoveVar
(
$top_prefix
.
'_modified'
);
return
''
;
}
/**
* Returns list record count queries (on all pages)
*
* @param Array $params
* @return int
*/
function
TotalRecords
(
$params
)
{
$list
=&
$this
->
GetList
(
$params
);
if
(!
$list
->
Counted
)
$list
->
CountRecs
();
return
$list
->
RecordsCount
;
}
/**
* Range filter field name
*
* @param Array $params
* @return string
*/
function
SearchInputName
(
$params
)
{
$field
=
$this
->
SelectParam
(
$params
,
'field,name'
);
$append
=
getArrayValue
(
$params
,
'type'
)
?
'_'
.
$params
[
'type'
]
:
''
;
return
'custom_filters['
.
$this
->
getPrefixSpecial
().
']['
.
$field
.
$append
.
']'
;
}
/**
* Return range filter field value
*
* @param Array $params
* @return string
*/
function
SearchField
(
$params
)
// RangeValue
{
$field
=
$this
->
SelectParam
(
$params
,
'field,name'
);
$custom_filters
=
$this
->
Application
->
RecallVar
(
$this
->
getPrefixSpecial
().
'_custom_filters'
);
$custom_filters
=
$custom_filters
?
unserialize
(
$custom_filters
)
:
Array
();
$append
=
getArrayValue
(
$params
,
'type'
);
return
getArrayValue
(
$custom_filters
,
$field
.(
$append
?
'_'
.
$append
:
''
)
);
}
function
SearchFormat
(
$params
)
{
$field
=
$params
[
'field'
];
$object
=&
$this
->
GetList
(
$params
);
$options
=
$object
->
GetFieldOptions
(
$field
);
$format
=
$options
[
$this
->
SelectParam
(
$params
,
'input_format'
)
?
'input_format'
:
'format'
];
$formatter_class
=
getArrayValue
(
$options
,
'formatter'
);
if
(
$formatter_class
)
{
$formatter
=&
$this
->
Application
->
recallObject
(
$formatter_class
);
$human_format
=
getArrayValue
(
$params
,
'human'
);
$edit_size
=
getArrayValue
(
$params
,
'edit_size'
);
$sample
=
getArrayValue
(
$params
,
'sample'
);
if
(
$sample
)
{
return
$formatter
->
GetSample
(
$field
,
$options
,
$object
);
}
elseif
(
$human_format
||
$edit_size
)
{
$format
=
$formatter
->
HumanFormat
(
$format
);
return
$edit_size
?
strlen
(
$format
)
:
$format
;
}
}
return
$format
;
}
/**
* Returns error of range field
*
* @param unknown_type $params
* @return unknown
*/
function
SearchError
(
$params
)
{
$field
=
$this
->
SelectParam
(
$params
,
'field,name'
);
$error_var_name
=
$this
->
getPrefixSpecial
().
'_'
.
$field
.
'_'
.
$params
[
'type'
].
'_error'
;
$error_msg
=
$this
->
Application
->
RecallVar
(
$error_var_name
);
if
(
$error_msg
)
{
$this
->
Application
->
StoreVar
(
$error_var_name
,
''
);
}
$object
=&
$this
->
Application
->
recallObject
(
$this
->
Prefix
.
'.'
.
$this
->
Special
.
'-item'
,
null
,
Array
(
'skip_autoload'
=>
true
));
return
$object
->
ErrorMsgs
[
$error_msg
];
}
/**
* Returns templates path for module, which is gathered from prefix module
*
* @param Array $params
* @return string
* @author Alex
*/
function
ModulePath
(
$params
)
{
$force_module
=
getArrayValue
(
$params
,
'module'
);
if
(
$force_module
)
{
if
(
$force_module
==
'#session#'
)
{
$force_module
=
$this
->
Application
->
RecallVar
(
'module'
);
}
else
{
$force_module
=
strtolower
(
$force_module
);
}
$module_folder
=
trim
(
$this
->
Application
->
findModule
(
'Name'
,
$force_module
,
'Path'
),
'/'
);
}
else
{
$module_folder
=
$this
->
Application
->
getUnitOption
(
$this
->
Prefix
,
'ModuleFolder'
);
}
return
'../../'
.
$module_folder
.
'/admin_templates/'
;
}
/**
* Returns object used in tag processor
*
* @access public
* @return kDBBase
*/
function
&
getObject
(
$params
=
Array
())
{
$object
=&
$this
->
Application
->
recallObject
(
$this
->
getPrefixSpecial
(),
$this
->
Prefix
,
$params
);
return
$object
;
}
/**
* Checks if object propery value matches value passed
*
* @param Array $params
* @return bool
*/
function
PropertyEquals
(
$params
)
{
$object
=&
$this
->
getObject
(
$params
);
$property_name
=
$this
->
SelectParam
(
$params
,
'name,var,property'
);
return
$object
->
$property_name
==
$params
[
'value'
];
}
/**
* Group list records by header, saves internal order in group
*
* @param Array $records
* @param string $heading_field
*/
function
groupRecords
(&
$records
,
$heading_field
)
{
$sorted
=
Array
();
$i
=
0
;
$record_count
=
count
(
$records
);
while
(
$i
<
$record_count
)
{
$sorted
[
$records
[
$i
][
$heading_field
]
][]
=
$records
[
$i
];
$i
++;
}
$records
=
Array
();
foreach
(
$sorted
as
$heading
=>
$heading_records
)
{
$records
=
array_merge_recursive
(
$records
,
$heading_records
);
}
}
}
?>
Event Timeline
Log In to Comment