mirror of https://github.com/MISP/MISP
chg: remove not used old plugin file
parent
8f3ac0970d
commit
dd8ec54e2a
|
@ -1,126 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prevents a record from being deleted when deletion would result in orphaned related records; if deletion is prevented, an explanatory error message is stored in the model's attribute $deletionError.
|
|
||||||
*
|
|
||||||
* Example: A user has written many posts. Now somebody tries to delete the user - which would result in orphaned posts with no user! So this behavior prevents deletion of the user.
|
|
||||||
*
|
|
||||||
* Notice: This behavior has only an effect when 'dependent' is set to false (otherwise the records are all deleted anyway and no orphans would be left behind).
|
|
||||||
*
|
|
||||||
* @author Joshua Muheim (Incense.ch)
|
|
||||||
* @copyright Joshua Muheim, 2011
|
|
||||||
* @package magic_tools
|
|
||||||
* @subpackage behaviors
|
|
||||||
*/
|
|
||||||
App::import('core', 'ModelBehavior');
|
|
||||||
class OrphansProtectableBehavior extends ModelBehavior {
|
|
||||||
/**
|
|
||||||
* Prepares the behavior.
|
|
||||||
*
|
|
||||||
* @param $model Model
|
|
||||||
* @param $settings array
|
|
||||||
*/
|
|
||||||
function setup(&$model, $settings) {
|
|
||||||
$Model->_deletionError = null; // Stores the deletion error message
|
|
||||||
$Model->orphansProtectableOptions = array_merge(array(
|
|
||||||
'listPossibleOrphans' => true,
|
|
||||||
'htmlError' => false
|
|
||||||
), $settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if there would be orphaned record left behind after deletion of this record; if so, deletion is prevented.
|
|
||||||
*
|
|
||||||
* @param $model Model
|
|
||||||
* @param $cascade boolean
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function beforeDelete(&$model, $cascade) {
|
|
||||||
if ($cascade) return true;
|
|
||||||
return !$Model->wouldLeaveOrphanedRecordsBehind();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if deletion of this record would leave orphaned associated records behind.
|
|
||||||
*
|
|
||||||
* @param $model Model
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function wouldLeaveOrphanedRecordsBehind(&$model) {
|
|
||||||
$possibleOrphans = array();
|
|
||||||
|
|
||||||
foreach ($Model->hasMany as $model => $settings) {
|
|
||||||
// Is relationship is dependent?
|
|
||||||
if ($settings['dependent']) { // Yes! Possible orphans are deleted, too!
|
|
||||||
// Do nothing
|
|
||||||
} else { // No! Possible orphans should be protected!
|
|
||||||
// Is there a possible orphan for this relation?
|
|
||||||
$Model->{$model}->recursive = -1;
|
|
||||||
$objects = $Model->{$model}->find('all', array('conditions' => array($settings['className'].'.'.$settings['foreignKey'] => $Model->id), 'order' => 'id asc'));
|
|
||||||
if (count($objects) > 0) { // Yes, there is at least one possible orphan!
|
|
||||||
$objectIds = array();
|
|
||||||
foreach ($objects as $object) {
|
|
||||||
$objectIds[] = $object[$model]['id'];
|
|
||||||
}
|
|
||||||
$possibleOrphans[$model] = $objectIds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Would orphans be left behind?
|
|
||||||
if (count($possibleOrphans) > 0) { // Yes! Create deletion error message!
|
|
||||||
$Model->_deletionError = $Model->createDeletionError($possibleOrphans);
|
|
||||||
return true;
|
|
||||||
} else { // No!
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the deletion error message (if there is one).
|
|
||||||
*
|
|
||||||
* @param $model Model
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function getDeletionError(&$model) {
|
|
||||||
return $Model->_deletionError;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the deletion error message and returns it.
|
|
||||||
*
|
|
||||||
* @param $model Model
|
|
||||||
* @param $possibleOrphans array
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function createDeletionError(&$model, $possibleOrphans) {
|
|
||||||
$errorParts = array();
|
|
||||||
foreach ($possibleOrphans as $model => $ids) {
|
|
||||||
$count = count($ids);
|
|
||||||
$modelName = $count > 1 ? Inflector::pluralize($model) : $model;
|
|
||||||
$errorParts[] = $count.' '.__($modelName, true).' (ID: '.$Model->createDeletionErrorIds($model, $ids).')';
|
|
||||||
}
|
|
||||||
return __('it has the following dependent items', true).': '.implode($errorParts, ', ');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a string containing HTML-links to comma separated IDs of the potentially orphaned records of the specified model.
|
|
||||||
*
|
|
||||||
* @param $model Model
|
|
||||||
* @param $orphanModel string
|
|
||||||
* @param $ids array
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function createDeletionErrorIds(&$model, $orphanModel, $ids) {
|
|
||||||
$messageParts = array();
|
|
||||||
if ($Model->orphansProtectableOptions['htmlError']) {
|
|
||||||
foreach ($ids as $id) {
|
|
||||||
$messageParts[] = '<a href="'.Inflector::pluralize(strtolower($orphanModel)).'/view/'.$id.'">'.$id.'</a>'; // TODO: Noch unschön! --zivi-muh
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$messageParts = $ids;
|
|
||||||
}
|
|
||||||
return implode($messageParts, ', ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
Loading…
Reference in New Issue