FOF30\Model\DataModel::canDelete PHP Method

canDelete() public method

Generic check for whether dependencies exist for this object in the db schema. This method is NOT used by default. If you want to use it you will have to override your delete(), trash() or forceDelete() method, or create an onBeforeDelete and/or onBeforeTrash event handler.
public canDelete ( integer $oid = null, array $joins = null ) : void
$oid integer The primary key of the record to delete
$joins array Any joins to foreign table, used to determine if dependent records exist
return void
    public function canDelete($oid = null, $joins = null)
    {
        $pkField = $this->getKeyName();
        if ($oid) {
            $this->{$pkField} = intval($oid);
        }
        if (!$this->{$pkField}) {
            throw new \InvalidArgumentException('Master table should be loaded or an ID should be passed');
        }
        if (is_array($joins)) {
            $db = $this->getDbo();
            $query = $db->getQuery(true)->select($db->qn('master') . '.' . $db->qn($pkField))->from($db->qn($this->tableName) . ' AS ' . $db->qn('master'));
            $tableNo = 0;
            foreach ($joins as $table) {
                // Sanity check on passed array
                $check = array('idfield', 'idalias', 'name', 'joinfield', 'label');
                $result = array_intersect($check, array_keys($table));
                if (count($result) != count($check)) {
                    throw new \InvalidArgumentException('Join array missing some keys, please check the documentation');
                }
                $tableNo++;
                $query->select(array('COUNT(DISTINCT ' . $db->qn('t' . $tableNo) . '.' . $db->qn($table['idfield']) . ') AS ' . $db->qn($table['idalias'])));
                $query->join('LEFT', $db->qn($table['name']) . ' AS ' . $db->qn('t' . $tableNo) . ' ON ' . $db->qn('t' . $tableNo) . '.' . $db->qn($table['joinfield']) . ' = ' . $db->qn('master') . '.' . $db->qn($pkField));
            }
            $query->where($db->qn('master') . '.' . $db->qn($pkField) . ' = ' . $db->q($this->{$pkField}));
            $query->group($db->qn('master') . '.' . $db->qn($pkField));
            $this->getDbo()->setQuery((string) $query);
            $obj = $this->getDbo()->loadObject();
            $msg = array();
            $i = 0;
            foreach ($joins as $table) {
                $pkField = $table['idalias'];
                if ($obj->{$pkField} > 0) {
                    $msg[] = \JText::_($table['label']);
                }
                $i++;
            }
            if (count($msg)) {
                $option = $this->container->componentName;
                $comName = $this->container->bareComponentName;
                $tbl = $this->getTableName();
                $tview = str_replace('#__' . $comName . '_', '', $tbl);
                $prefix = $option . '_' . $tview . '_NODELETE_';
                $message = '<ul>';
                foreach ($msg as $key) {
                    $message .= '<li>' . \JText::_(strtoupper($prefix . $key)) . '</li>';
                }
                $message .= '</ul>';
                throw new \RuntimeException($message);
            }
        }
    }