capability_name; $role = get_role($roleName); $role->add_cap($capabilityName); } function Create($name, $description = '', $standardFields = array(), $hiddenExtFields = array(), $categories = array(), $display_order = 1) { include_once('RC_Format.php'); global $wpdb; $capabilityName = RCCWP_CustomWritePanel::GetCapabilityName($name); $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_WRITE_PANELS . " (name, description, display_order, capability_name, type)" . " values" . " (%s, %s, %d, %s, %s)", RC_Format::TextToSql($name), RC_Format::TextToSql($description), $display_order, RC_Format::TextToSql($capabilityName), RC_Format::TextToSql($_POST['radPostPage']) ); $wpdb->query($sql); $customWritePanelId = $wpdb->insert_id; if (!isset($categories)) $categories = array(); foreach ($categories as $cat_id) { $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_PANEL_CATEGORY . " (panel_id, cat_id)" . " values (%d, %d)", $customWritePanelId, $cat_id ); $wpdb->query($sql); } if (!isset($standardFields)) $standardFields = array(); foreach ($standardFields as $standard_field_id) { $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_PANEL_STANDARD_FIELD . " (panel_id, standard_field_id)" . " values (%d, %d)", $customWritePanelId, $standard_field_id ); $wpdb->query($sql); } if (!empty($hiddenExtFields)) { foreach ($hiddenExtFields as $css_id) { if ($css_id != '') { $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_PANEL_HIDDEN_EXTERNAL_FIELD . " (panel_id, css_id)" . " values (%d, %s)", $customWritePanelId, RC_Format::TextToSql($css_id) ); $wpdb->query($sql); } } } return $customWritePanelId; } function Delete($customWritePanelId = null) { include_once ('RCCWP_CustomField.php'); if (isset($customWritePanelId)) { global $wpdb; $customWritePanel = RCCWP_Application::GetCustomWritePanels($customWritePanelId); $customFields = RCCWP_CustomWritePanel::GetCustomFields($customWritePanel->id); foreach ($customFields as $field) { RCCWP_CustomField::Delete($field->id); } $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_WRITE_PANELS . " WHERE id = %d", $customWritePanel->id ); $wpdb->query($sql); $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_CATEGORY . " WHERE panel_id = %d", $customWritePanel->id ); $wpdb->query($sql); $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_STANDARD_FIELD . " WHERE panel_id = %d", $customWritePanelId ); $wpdb->query($sql); $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_HIDDEN_EXTERNAL_FIELD . " WHERE panel_id = %d", $customWritePanelId ); $wpdb->query($sql); } } function Get($customWritePanelId) { global $wpdb; $sql = "SELECT id, name, description, display_order, capability_name, type FROM " . RC_CWP_TABLE_WRITE_PANELS . " WHERE id = " . (int)$customWritePanelId; $results = $wpdb->get_row($sql); return $results; } function GetAssignedCategoryIds($customWritePanelId) { $results = RCCWP_CustomWritePanel::GetAssignedCategories($customWritePanelId); $ids = array(); foreach ($results as $r) { $ids[] = $r->cat_id; } return $ids; } function GetAssignedCategories($customWritePanelId) { global $wpdb; /* $sql = "SELECT rc.cat_id, cat_name FROM " . RC_CWP_TABLE_PANEL_CATEGORY . " rc JOIN $wpdb->categories wp ON rc.cat_ID = wp.cat_ID" . " WHERE panel_id = " . $customWritePanelId; */ if( $wpdb->terms != '' ) { $sql = "SELECT rc.cat_id, wp.name AS cat_name FROM " . RC_CWP_TABLE_PANEL_CATEGORY . " rc JOIN $wpdb->terms wp ON rc.cat_ID = wp.term_id" . " WHERE panel_id = " . $customWritePanelId; } else { $sql = "SELECT rc.cat_id, cat_name FROM " . RC_CWP_TABLE_PANEL_CATEGORY . " rc JOIN $wpdb->categories wp ON rc.cat_ID = wp.cat_ID WHERE panel_id = " . $customWritePanelId; } $results = $wpdb->get_results($sql); if (!isset($results)) $results = array(); return $results; } function GetCapabilityName($customWritePanelName) { // copied from WP's sanitize_title_with_dashes($title) (formatting.php) $capabilityName = strip_tags($customWritePanelName); // Preserve escaped octets. $capabilityName = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $capabilityName); // Remove percent signs that are not part of an octet. $capabilityName = str_replace('%', '', $capabilityName); // Restore octets. $capabilityName = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $capabilityName); $capabilityName = remove_accents($capabilityName); if (seems_utf8($capabilityName)) { if (function_exists('mb_strtolower')) { $capabilityName = mb_strtolower($capabilityName, 'UTF-8'); } $capabilityName = utf8_uri_encode($capabilityName, 200); } $capabilityName = strtolower($capabilityName); $capabilityName = preg_replace('/&.+?;/', '', $capabilityName); // kill entities $capabilityName = preg_replace('/[^%a-z0-9 _-]/', '', $capabilityName); $capabilityName = preg_replace('/\s+/', '_', $capabilityName); $capabilityName = preg_replace('|-+|', '_', $capabilityName); $capabilityName = trim($capabilityName, '_'); return $capabilityName; } function GetCustomFields($customWritePanelId) { global $wpdb; $sql = "SELECT cf.id, cf.name, tt.name AS type, cf.description, cf.display_order, co.options, co.default_option AS default_value, tt.has_options, cp.properties, tt.has_properties, tt.allow_multiple_values FROM " . RC_CWP_TABLE_PANEL_CUSTOM_FIELD . " cf LEFT JOIN " . RC_CWP_TABLE_CUSTOM_FIELD_OPTIONS . " co ON cf.id = co.custom_field_id" . " LEFT JOIN " . RC_CWP_TABLE_CUSTOM_FIELD_PROPERTIES . " cp ON cf.id = cp.custom_field_id" . " JOIN " . RC_CWP_TABLE_CUSTOM_FIELD_TYPES . " tt ON cf.type = tt.id" . " WHERE panel_id = " . $customWritePanelId . " ORDER BY cf.display_order"; $results =$wpdb->get_results($sql); if (!isset($results)) $results = array(); for ($i = 0; $i < $wpdb->num_rows; ++$i) { $results[$i]->options = unserialize($results[$i]->options); $results[$i]->properties = unserialize($results[$i]->properties); $results[$i]->default_value = unserialize($results[$i]->default_value); } return $results; } function GetHiddenExternalFieldCssIds($customWritePanelId) { global $wpdb; $sql = "SELECT css_id FROM " . RC_CWP_TABLE_PANEL_HIDDEN_EXTERNAL_FIELD . " WHERE panel_id = " . $customWritePanelId; $results = $wpdb->get_col($sql); if (!isset($results)) $results = array(); return $results; } function GetStandardFieldCssIds($customWritePanelId) { $results = RCCWP_CustomWritePanel::GetStandardFields($customWritePanelId); $ids = array(); foreach ($results as $r) { $ids[] = $r->css_id; } return $ids; } function GetStandardFieldIds($customWritePanelId) { $results = RCCWP_CustomWritePanel::GetStandardFields($customWritePanelId); $ids = array(); foreach ($results as $r) { $ids[] = $r->standard_field_id; } return $ids; } function GetStandardFields($customWritePanelId) { global $wpdb; $sql = "SELECT ps.standard_field_id, name, css_id FROM " . RC_CWP_TABLE_PANEL_STANDARD_FIELD . " ps JOIN " . RC_CWP_TABLE_STANDARD_FIELDS . " sf ON ps.standard_field_id = sf.id" . " WHERE panel_id = " . $customWritePanelId; $results = $wpdb->get_results($sql); if (!isset($results)) $results = array(); return $results; } function Update($customWritePanelId, $name, $description = '', $standardFields = array(), $hiddenExtFields = array(), $categories = array(), $display_order = 1) { include_once('RC_Format.php'); global $wpdb; $capabilityName = RCCWP_CustomWritePanel::GetCapabilityName($name); $sql = sprintf( "UPDATE " . RC_CWP_TABLE_WRITE_PANELS . " SET name = %s" . " , description = %s" . " , display_order = %d" . " , capability_name = %s" . " , type = %s" . " where id = %d", RC_Format::TextToSql($name), RC_Format::TextToSql($description), $display_order, RC_Format::TextToSql($capabilityName), RC_Format::TextToSql($_POST['radPostPage']), $customWritePanelId ); $wpdb->query($sql); if (!isset($categories) || empty($categories)) { $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_CATEGORY . " WHERE panel_id = %d", $customWritePanelId ); $wpdb->query($sql); } else { $currentCategoryIds = array(); $currentCategoryIds = RCCWP_CustomWritePanel::GetAssignedCategoryIds($customWritePanelId); $keepCategoryIds = array_intersect($currentCategoryIds, $categories); $deleteCategoryIds = array_diff($currentCategoryIds, $keepCategoryIds); $insertCategoryIds = array_diff($categories, $keepCategoryIds); foreach ($insertCategoryIds as $cat_id) { $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_PANEL_CATEGORY . " (panel_id, cat_id)" . " values (%d, %d)", $customWritePanelId, $cat_id ); $wpdb->query($sql); } if (!empty($deleteCategoryIds)) { $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_CATEGORY . " WHERE panel_id = %d" . " AND cat_id IN (%s)", $customWritePanelId, implode(',', $deleteCategoryIds) ); $wpdb->query($sql); } } if (!isset($standardFields) || empty($standardFields)) { $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_STANDARD_FIELD . " WHERE panel_id = %d", $customWritePanelId ); $wpdb->query($sql); } else { $currentStandardFieldIds = array(); $currentStandardFieldIds = RCCWP_CustomWritePanel::GetStandardFieldIds($customWritePanelId); $keepStandardFieldIds = array_intersect($currentStandardFieldIds, $standardFields); $deleteStandardFieldIds = array_diff($currentStandardFieldIds, $keepStandardFieldIds); $insertStandardFieldIds = array_diff($standardFields, $keepStandardFieldIds); foreach ($insertStandardFieldIds as $standard_field_id) { $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_PANEL_STANDARD_FIELD . " (panel_id, standard_field_id)" . " values (%d, %d)", $customWritePanelId, $standard_field_id ); $wpdb->query($sql); } if (!empty($deleteStandardFieldIds)) { $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_STANDARD_FIELD . " WHERE panel_id = %d" . " AND standard_field_id IN (%s)", $customWritePanelId, implode(',', $deleteStandardFieldIds) ); $wpdb->query($sql); } } $sql = sprintf( "DELETE FROM " . RC_CWP_TABLE_PANEL_HIDDEN_EXTERNAL_FIELD . " WHERE panel_id = %d", $customWritePanelId ); $wpdb->query($sql); if (!empty($hiddenExtFields)) { foreach ($hiddenExtFields as $css_id) { if ($css_id != '') { $sql = sprintf( "INSERT INTO " . RC_CWP_TABLE_PANEL_HIDDEN_EXTERNAL_FIELD . " (panel_id, css_id)" . " values (%d, %s)", $customWritePanelId, RC_Format::TextToSql($css_id) ); $wpdb->query($sql); } } } } } ?>