- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
121 lines
2.7 KiB
PHP
Executable File
121 lines
2.7 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* The group Factory.
|
|
*
|
|
* @package AdvancedAds
|
|
* @author Advanced Ads <info@wpadvancedads.com>
|
|
* @since 1.48.0
|
|
*/
|
|
|
|
namespace AdvancedAds\Groups;
|
|
|
|
use WP_Term;
|
|
use Exception;
|
|
use AdvancedAds\Abstracts\Group;
|
|
use AdvancedAds\Abstracts\Factory;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Groups Factory.
|
|
*/
|
|
class Group_Factory extends Factory {
|
|
|
|
/**
|
|
* Create an empty group object
|
|
*
|
|
* @param string $type Type of group to create.
|
|
*
|
|
* @return Group|bool Group object or false if the group type not found.
|
|
*/
|
|
public function create_group( $type = 'default' ) {
|
|
$group_type = wp_advads_get_group_type( $type );
|
|
|
|
if ( ! $group_type ) {
|
|
return false;
|
|
}
|
|
|
|
$classname = $group_type->get_classname();
|
|
|
|
// Create group.
|
|
$group = new $classname( 0 );
|
|
$group->set_type( $group_type->get_id() );
|
|
|
|
return $group;
|
|
}
|
|
|
|
/**
|
|
* Get the group object.
|
|
*
|
|
* @param Group|WP_Term|int|bool $group_id Group instance, term instance or numeric.
|
|
* @param string $new_type Change type of group.
|
|
*
|
|
* @return Group|bool Group object or false if the group cannot be loaded.
|
|
*/
|
|
public function get_group( $group_id, $new_type = '' ) {
|
|
$group_id = $this->get_group_id( $group_id );
|
|
|
|
if ( ! $group_id ) {
|
|
return false;
|
|
}
|
|
|
|
$group_type = '' !== $new_type ? $new_type : $this->get_group_type( $group_id );
|
|
$classname = $this->get_classname( wp_advads_get_group_type_manager(), $group_type );
|
|
|
|
try {
|
|
return new $classname( $group_id );
|
|
} catch ( Exception $e ) {
|
|
return false;
|
|
}
|
|
|
|
return new Group_Standard();
|
|
}
|
|
|
|
/**
|
|
* Get the type of the group.
|
|
*
|
|
* @param int $group_id Group ID.
|
|
*
|
|
* @return string The type of the group.
|
|
*/
|
|
private function get_group_type( $group_id ): string {
|
|
// Allow the overriding of the lookup in this function. Return the group type here.
|
|
$override = apply_filters( 'advanced-ads-group-type', false, $group_id );
|
|
if ( $override ) {
|
|
return $override;
|
|
}
|
|
|
|
$type = get_term_meta( $group_id, Group_Repository::TYPE_METAKEY, true );
|
|
if ( empty( $type ) ) {
|
|
$options = get_option( 'advads-ad-groups', [] );
|
|
$type = $options[ $group_id ]['type'] ?? 'default';
|
|
update_term_meta( $group_id, Group_Repository::TYPE_METAKEY, $type );
|
|
}
|
|
|
|
return $type ?? 'default';
|
|
}
|
|
|
|
/**
|
|
* Get the group ID depending on what was passed.
|
|
*
|
|
* @param Group|WP_Term|int|bool $group Group instance, term instance or numeric.
|
|
*
|
|
* @return int|bool false on failure
|
|
*/
|
|
private function get_group_id( $group ) {
|
|
if ( is_numeric( $group ) ) {
|
|
return $group;
|
|
}
|
|
|
|
if ( is_a_group( $group ) ) {
|
|
return $group->get_id();
|
|
}
|
|
|
|
if ( ! empty( $group->term_id ) ) {
|
|
return $group->term_id;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|